在Windows中,我需要一种以编程方式检测显示器是否宽视的方法。
GetSystemMetrics返回桌面大小,这种方式有效,但如果用户有宽屏显示器,比如1024x768,我会错误地将其归类为非宽视频。
GetDeviceCaps与HORZRES和VERTRES有类似的问题,当在宽显示器中使用非宽分辨率时,甚至HORZSIZE和VERTSIZE也会给出错误的结果。
有没有办法可靠地检测到它?
答案 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)
明智的做法是按宽度与高度的比例对显示器进行分类。这就是我现在看到的很多游戏。
如果你可以得到宽度,那么你可以得到高度。在那之后,答案只是一个小的数学运算。