我的问题是,当主监视器百分比为150%,第二个监视器为100%,并且启动项目并将窗口从1切换到2时,我不知道如何获取正确的DPI。窗口状态,我得到了DPI,但是我尝试了,但是de DPI是标准144不变。
这是我的代码:
public static void GetDpi(this System.Windows.Forms.Screen screen, DpiType dpiType, out uint dpiX, out uint dpiY)
{
var pnt = new System.Drawing.Point(screen.Bounds.Left + 1, screen.Bounds.Top + 1);
var mona = MonitorFromPoint(pnt, 2/*MONITOR_DEFAULTTONEAREST*/);
GetDpiForMonitor(mona, dpiType, out dpiX, out dpiY);
}
[DllImport("User32.dll")]
private static extern IntPtr MonitorFromPoint([In]System.Drawing.Point pt, [In]uint dwFlags);
[DllImport("Shcore.dll")]
private static extern IntPtr GetDpiForMonitor([In]IntPtr hmonitor, [In]DpiType dpiType, [Out]out uint dpiX, [Out]out uint dpiY);
方法调用:
uint x = 0, y = 0;
foreach (var screen in System.Windows.Forms.Screen.AllScreens)
{
if (screen.DeviceName == currentMonitor.Name)
{
screen.GetDpi(currentMonitor.MonitorHandle,DpiType.Angular, out x, out y);
break;
}
}
答案 0 :(得分:0)
默认情况下,您的应用程序设置为“系统DPI感知”。您需要将其设置为PerMonitor DPI Aware。现在有多种方法可以执行此操作,其中某些方法取决于当前正在运行的Windows版本。一种解决方法是将以下内容添加到应用程序的清单中:
<dpiAware>true/PM</dpiAware>
如果您在Windows 10上运行,则还可以尝试致电:
SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE);
应用启动时。
祝你好运。