Pregunta

Necesito una manera de detectar mediante programación si el monitor es amplia o no, en Windows.

GetSystemMetrics devuelve el tamaño del escritorio, qué tipo de obras, pero si un usuario tiene un monitor de pantalla ancha en, por ejemplo, 1024x768, voy a incorrectamente clasificarlo como no son de ancho.

GetDeviceCaps tiene problemas similares con HORZRES y VERTRES, e incluso HORZSIZE Y VERTSIZE dar resultados incorrectos cuando se utiliza una resolución no amplia en una amplia monitor.

¿Hay alguna manera de detectar esta manera confiable?

¿Fue útil?

Solución

Usted puede ser capaz de obtener el tamaño físico real a través de EDID . Ver aquí: Cómo obtener la correcta tamaño físico del monitor?

Otros consejos

Esta es una versión mejor que no pierde el tiempo con el EDID o el registro. Se hace la suposición (que está en mi humilde opinión muy precisa) que la resolución máxima soportada por la pantalla es la mejor forma nativa.

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

Saludos.

tratar SystemInformation.PrimaryMonitorSize

Lo más sensato sería clasificar monitores por la anchura a la proporción de altura. Eso es lo que veo un montón de juegos que hacen estos días.

Si usted puede conseguir el ancho, entonces es probable que pueda obtener la altura. Después de eso, la respuesta es sólo una pequeña operación matemática de distancia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top