Come rilevare se un monitor è widescreen in Windows
-
16-09-2019 - |
Domanda
Ho bisogno di un modo per rilevare programatically se il monitor è ampia o no, in Windows.
GetSystemMetrics restituisce la dimensione del desktop, che tipo di opere, ma se un utente ha un monitor widescreen a, diciamo, 1024x768, io erroneamente classificare come non wide.
GetDeviceCaps ha problemi simili con HORZRES e VERTRES, e anche HORZSIZE E VERTSIZE fornire risultati non corretti quando una risoluzione non wide viene utilizzato in una vasta monitor.
C'è un modo per rilevare in modo affidabile questo?
Soluzione
Si potrebbe essere in grado di ottenere il formato fisico reale attraverso EDID . Vedi qui: Come ottenere il corretto dimensione fisica del monitor?
Altri suggerimenti
Ecco una versione migliore che non pasticciare con l'EDID o Registro di sistema. Rende l'ipotesi (che è secondo me abbastanza preciso) che la risoluzione massima supportata dal display è la misura migliore nativo.
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";
Saluti.
provare SystemInformation.PrimaryMonitorSize
La cosa più sensata sarebbe quella di classificare i monitor per larghezza e altezza proporzione. Questo è quello che vedo un sacco di giochi che fanno in questi giorni.
Se si riesce a ottenere la larghezza, allora probabilmente si può ottenere l'altezza. Dopo di che, la risposta è una sola piccola operazione matematica di distanza.