我想在 Windows 10 Pro 64 位中检索指定进程 ID 的有效 DPI 感知值。我需要的值是我可以使用 WinAPI GetProcessDpiAwareness函数获得的PROCESS_DPI_AWARENESS之一。
为了实现我所需要的,我在 VS 2015 中编写了一个简单的单窗口 C# WPF 应用程序。我在 TextBox txtProcessID 中输入我感兴趣的进程 ID,当我按下 txtProcessID 按钮时,结果会显示在 TextBlock txtResult 中:
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");
}
但是为任何进程调用 GetProcessDpiAwareness 总是会给我一个错误 E_INVALIDARG。我究竟做错了什么?