繁体   English   中英

如何检测Windows中的显示器是否为宽屏

[英]How to detect whether a monitor is widescreen in Windows

在Windows中,我需要一种以编程方式检测显示器是否宽的方法。

GetSystemMetrics返回桌面的大小,这种方式有效,但如果用户有宽屏显示器,比如1024x768,我会错误地将其分类为非宽范围。

GetDeviceCaps与HORZRES和VERTRES有类似的问题,当在宽监视器中使用非宽分辨率时,甚至HORZSIZE和VERTSIZE也会给出错误的结果。

有没有办法可靠地检测到这个?

您可以通过EDID获得实际的物理尺寸。 请参见此处: 如何获得正确的显示器物理尺寸?

这是一个更好的版本,不会弄乱EDID或注册表。 它使得假设(IMHO非常准确)的假设是显示器支持的最大分辨率是最佳的原生适合度。

DEVMODEA modeInfo;
modeInfo.dmSize = sizeof(DEVMODEA);
modeInfo.dmDriverExtra = NULL;
int modeNum = 0;
int xMax = 0, yMax = 0;
while (EnumDisplaySettingsExA(0, modeNum, &modeInfo, 0)) {
    ++modeNum;
    if (modeInfo.dmPelsWidth > xMax) {
        xMax = modeInfo.dmPelsWidth;
        yMax = modeInfo.dmPelsHeight;
    }
}
cout << "Monitor aspect ratio : " << (double)xMax/yMax << "\n";

干杯。

尝试SystemInformation.PrimaryMonitorSize

明智的做法是按宽度与高度的比例对显示器进行分类。 这就是我现在看到的很多游戏。

如果你可以得到宽度,那么你可以得到高度。 在那之后,答案只是一个小的数学运算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM