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

时间:2009-09-25 15:28:45

标签: c++ windows winapi widescreen

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

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

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

有没有办法可靠地检测到它?

4 个答案:

答案 0 :(得分:4)

您可以通过EDID获得实际的实际尺寸。见这里:How to obtain the correct physical size of the monitor?

答案 1 :(得分:2)

这是一个更好的版本,不会弄乱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";

干杯。

答案 2 :(得分:0)

尝试SystemInformation.PrimaryMonitorSize

答案 3 :(得分:0)

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

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