Windows 10 Pro 64ビットで指定されたプロセスIDの有効なDPI認識値を取得したい。私が必要とする値は、WinAPI GetProcessDpiAwareness関数で取得できるPROCESS_DPI_AWARENESSの1つです。C#からGetProcessDpiAwarenessを呼び出すと常にエラーE_INVALIDARGが返される
私は必要なものを実装するために、VS 2015でシンプルな1ウィンドウC#WPFアプリケーションを作成しました。興味のあるプロセスIDをTextBox txtProcessIDに入力し、結果をTextBlock txtResultに表示しますtxtProcessIDボタン:
private const int S_OK = 0;
private enum PROCESS_DPI_AWARENESS
{
PROCESS_DPI_UNAWARE = 0,
PROCESS_SYSTEM_DPI_AWARE = 1,
PROCESS_PER_MONITOR_DPI_AWARE = 2
}
[DllImport("Shcore.dll")]
private static extern int GetProcessDpiAwareness(IntPtr hprocess, out PROCESS_DPI_AWARENESS value);
private void btnGetDPIAwareness_Click(object sender, RoutedEventArgs e)
{
int procIDint = int.Parse(txtProcessID.Text);
IntPtr procID = new IntPtr(procIDint);
PROCESS_DPI_AWARENESS value;
int res = GetProcessDpiAwareness(procID, out value);
if (res == S_OK)
txtResult.Text = value.ToString();
else
txtResult.Text = "Error: " + res.ToString("X");
}
しかし、いつも私にエラーE_INVALIDARGを与える任意のプロセスのためにGetProcessDpiAwarenessを呼び出します。私は間違って何をしていますか?
[GetProcessDpiAwareness](https://msdn.microsoft.com/en-us/library/windows/desktop/dn302113.aspx):* "hprocess:**問い合わせ中のプロセスのハンドル**" * - あなたは盲目的にIDを渡すのに対して、APIはハンドルを期待しています。プロセスIDからプロセスハンドルを取得するには、たとえば[OpenProcess](https://msdn.microsoft.com/en-us/library/windows/desktop/ms684320.aspx)を呼び出します。 – IInspectable
https://msdn.microsoft.com/en-us/library/system.diagnostics.process.handle(v=vs.110).aspx –