Как определить, является ли монитор широкоэкранным в Windows

StackOverflow https://stackoverflow.com/questions/1478003

Вопрос

Мне нужен способ программного определения того, широкий монитор или нет, в Windows.

GetSystemMetrics возвращает размер рабочего стола, и это вроде как работает, но если у пользователя широкоэкранный монитор, скажем, с разрешением 1024x768, я неправильно отнесу его к неширокому.

GetDeviceCaps имеет аналогичные проблемы с HORZRES и VERTRES, и даже HORZSIZE И VERTSIZE дают неверные результаты, когда на широком мониторе используется неширокое разрешение.

Есть ли способ надежно это обнаружить?

Это было полезно?

Решение

Вы можете получить фактический физический размер через EDID.Глянь сюда: Как получить правильный физический размер монитора?

Другие советы

Вот лучшая версия, которая не мешает EDID или реестру.Он делает предположение (что, на мой взгляд, весьма точно), что максимальное разрешение, поддерживаемое дисплеем, является наиболее подходящим.

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 с атрибуция
Не связан с StackOverflow
scroll top