在我的应用程序中,我使用以下代码获取屏幕分辨率:
SystemInformation.PrimaryMonitorSize
我用这段代码得到了 DPI:
using (Graphics g = Graphics.FromHdc(NativeMethods.GetDC(IntPtr.Zero)))
{
dpiX = g.DpiX;
dpiY = g.DpiY;
}
这在大多数情况下都可以正常工作。但是,当代码在打开 Aero 的 Vista 机器上运行,并且用户将显示器设置为使用高 DPI 时,奇怪的结果又回来了。
假设用户将机器设置为以 1024 x 768 运行并且 DPI 为 144,上面的代码将返回 683 x 512 的分辨率和 96 的 DPI。
但是,如果 Aero 关闭,结果会如我所料返回。Aero 在做什么?如何获得真正的分辨率和 DPI?