¿Cómo consultar la resolución de hardware NATIVA del monitor primario en Windows?

Necesito encontrar la "mejor" o resolución nativa para un monitor LCD adjunto en Windows (que luego estableceré mediante programación y sé cómo hacerlo). Permítanme repetir que no necesito la resolución actual de Windows, ni me preocupo sobre CRT / proyectores.

Lo he visto funcionar con este programa, así que sé que es posible a pesar de los detractores:http://www.entechtaiwan.com/util/moninfo.shtm

Sería mejor hablar directamente con el monitor y consultar la información EDID. Sin embargo, he visto que está almacenado en caché en el registro y no tendría problemas para extraerlo de HKLM \ SYSTEM \ CurrentControlSet \ Enum \ DISPLAY, pero no puedo encontrar la manera de hacer coincidir los datos con el monitor principal actual.

Encontré este programa C en:http://www.tech-archive.net/Archive/Development/microsoft.public.development.device.drivers/2004-08/0294.html y un programa similar de python:http://www.koders.com/python/fid7FCCE3C908F376DC62F06CAD9B11C6D7C1CFA78F.aspx

Desafortunadamente, tengo muchos problemas para convertir el programa C a python, ya que el código relevante no parece estar en los módulos win32all. Intentaría compilarlo, pero no tengo espacio en disco para un gran compilador y no he usado C durante años. Estoy un poco fuera de mi elemento con ctypes también.

Mi plan B será usar EnumDisplaySettings () para encontrar el valor más grande para la resolución y establecerlo en eso. En las PC que he probado, da la resolución correcta, pero aún podría ser problemático.

Preferiría una solución en Python, pero tal vez alguien podría ayudarme a modificar el programa C para escupir la resolución y compilarla. Gracias por adelantado.

Actualizar:

He encontrado una posible solución. Ahora estoy leyendo WMI para encontrar un monitor que esté disponible (no fuera de línea), tomando su identificación de dispositivo PNP y leyendo EDID del registro en la subclave con el valor de identificación. Luego analizo los datos de los bytes 38 y 39 y calculo. No muy limpio, pero estoy obteniendo resultados. Si esta es una forma razonable de hacerlo, cerraré esta pregunta, gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta