关于c#:获取每个屏幕的分辨率和缩放系数

Get each screen resolution and zoom factor

我试图获得每个屏幕分辨率(例如:1920x1080)和缩放系数(例如:125%或120 dpi),而无需在屏幕之间移动应用程序。

我尝试了很多类/方法,但没有一个给我正确的设置结果(Windows 10,主屏幕为1920x1080缩放125%,辅助屏幕(右侧)为1920x1080缩放100%)。

System.Windows.Forms.Screen给出那些结果:
-第一屏1920x1080分辨率(确定)
-第二个屏幕的分辨率为2400x1350(不正常,应为1920x1080)

与http://www.wpftutorial.net/ScreenResolutions.html相同的结果

使用PInvoke,shcore.dllGetDpiForMonitor()给出以下结果:
-第一屏120(确定)
-第二屏显示120(不正常,应该为96)

您是否知道我该怎么做并获得正确的结果?


我找到了解决方案:在注册表中,解析是正确的。

1
HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Hardware Profiles\\*\\CONTROL\\VIDEO\\*\\*

在这里,您可以找到当前屏幕,其中Attach.ToDesktop = 1。
然后,您可以使用DefaultSettings.XResolutionDefaultSettings.YResolutionAttach.RelativeXAttach.RelativeY查找屏幕分辨率和位置。

要查找缩放系数,如果注册表中的分辨率与System.Windows.Forms.Screen中的分辨率相同,请使用GetDpiForMonitor()或从两者中获取比率并将其乘以96。