ich die effektive DPI Bewusstsein Wert für einen bestimmten Prozess-ID in Windows 10 Pro 64-Bit abrufen möchten. Der Wert, den ich brauche, ist einer der PROCESS_DPI_AWARENESS Ich kann mit der WinAPI GetProcessDpiAwareness Funktion bekommen.Aufruf GetProcessDpiAwareness von C# immer wieder Fehler E_INVALIDARG
Um zu implementieren, was ich brauche, schrieb ich eine einfache Ein-Fenster-C# -WPF-App in VS 2015. Ich geben die Prozess-ID, die ich interessiert in die TextBox txtProcessID und das Ergebnis wird im TextBlock txtResult angezeigt, wenn ich drücke die txtProcessID Taste:
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");
}
Aber GetProcessDpiAwareness Aufruf für jeden Prozess gibt mir immer einen Fehler E_INVALIDARG. Was mache ich falsch?
[GetProcessDpiAwareness] (https://msdn.microsoft.com/en-us/library/windows/desktop/dn302113.aspx): * "hprocess: ** Handle ** des Prozesses, der abgefragt wird." * - Die API erwartet einen Handle, während Sie blind eine ID übergeben. Rufen Sie [OpenProcess] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms684320.aspx) auf, um eine Prozesskennung von einer Prozess-ID abzurufen. – IInspectable
https://msdn.microsoft.com/en-us/library/system.diagnostics.process.handle(v=vs.110).aspx –