Frage

Ich brauche eine Art und Weise programmatisch zu erkennen, ob der Monitor breit oder nicht, in Windows.

GetSystemMetrics gibt die Größe des Desktops, welche Art von Arbeiten, aber wenn ein Benutzer einen Widescreen-Monitor hat, sagen wir, 1024x768, werde ich es falsch klassifizieren als nicht breit.

GetDeviceCaps hat ähnliche Probleme mit HORZRES und VERTRES und sogar HORZSIZE UND VERTSIZE falsche Ergebnisse geben, wenn eine nicht-weite Auflösung in einem breiten Monitor verwendet wird.

Gibt es eine Möglichkeit, dies zuverlässig zu erkennen?

War es hilfreich?

Lösung

könnten Sie in der Lage sein, die tatsächliche physikalische Größe durch EDID zu bekommen. Siehe hier: So erhalten Sie die richtigen physikalische Größe des Monitors?

Andere Tipps

Hier ist eine bessere Version, die nicht mit Zohan an der EDID oder der Registrierung der Fall ist. Es macht die Annahme, (was ziemlich genau ist IMHO), dass die maximale von der Anzeige unterstützte Auflösung ist die beste einheimische fit.

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";

Prost.

versuchen SystemInformation.PrimaryMonitorSize

Das Vernünftigste wäre Monitore Höhe Anteil von Breite zu klassifizieren. Das ist, was ich eine Menge Spiele in diesen Tagen sehen zu tun.

Wenn Sie die Breite bekommen, dann können Sie wahrscheinlich die Höhe bekommen. Danach ist die Antwort nur eine kleine mathematische Operation entfernt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top