【发布时间】:2018-06-12 11:28:35
【问题描述】:
我需要获取外接显示器的 dpi,但我总是获取主显示器的 dpi。我也做了清单设置。 我使用以下代码来获取它。
定义
public static void GetPerMonitorDPIEx(ref double dx, ref double dy, int x,
int y)
{
UInt32 dpiX = 0;
UInt32 dpiY = 0;
System.Drawing.Point pt = new System.Drawing.Point(x, y);
bool m = SetProcessDpiAwarenessContext((int)PROCESS_DPI_AWARENESS.DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
var mhandle = MonitorFromPoint( pt, Utils.DEFAULT_TO_NEAREST);
uint m5 = GetDpiForMonitor(mhandle, MONITOR_DPI_TYPE.MDT_EFFECTIVE_DPI, out dpiX, out dpiY);
dx = (double)dpiX / 96;
dy = (double)dpiY / 96;
}
致电
GetPerMonitorDPIEx(ref dpiX, ref dpiY, System.Windows.Forms.Screen.AllScreens[i].Bounds.Left + 1, System.Windows.Forms.Screen.AllScreens[i].Bounds.Top +1);
我可以看到两个显示器的监视器句柄都正确,之后 dpi 值总是来自主显示器。
【问题讨论】:
-
请通过屏幕显示您的循环。
-
foreach(Screen.AllScreens 中的变量 i)
-
如果这是你的循环,
AllScreens[i]将无法工作/编译,因为AllScreens的索引是int。 -
实际上,我检查了每台显示器的 left 和 top 的值,它们是正确的。
-
是的,我确实将其转换为 int。
标签: c# .net dpi multiple-monitors