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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top