Windows 10 Pro 64 비트에서 지정된 프로세스 ID에 대한 유효한 DPI 인식 값을 검색하려고합니다. 내가 필요한 값은 PROCESS_DPI_AWARENESS 중 하나이며 WinAPI GetProcessDpiAwareness 기능을 사용할 수 있습니다.C#에서 GetProcessDpiAwareness를 호출하면 항상 오류가 반환됩니다. E_INVALIDARG
VS 2015에서 간단한 한 창 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");
}
그러나 모든 프로세스에 대한 GetProcessDpiAwareness를 호출하면 항상 나에게 오류 E_INVALIDARG를 제공합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
[GetProcessDpiAwareness] (https://msdn.microsoft.com/en-us/library/windows/desktop/dn302113.aspx) : * "hprocess : ** 처리중인 ** 처리중인 쿼리 **" * - API는 맹목적으로 ID를 전달하는 반면 핸들은 예상합니다. 프로세스 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 –