Как запросить ИСХОДНОЕ аппаратное разрешение основного монитора в Windows?

Мне нужно найти "лучшее" или собственное разрешение для подключенного ЖК-монитора под Windows (которое я затем установлю программно и знаю, как это сделать.) Позвольте мне повторить, что мне не нужно текущее разрешение Windows, и мне не нужно беспокоиться об ЭЛТ / проекторах.

Я видел, как это работает с этой программой, http://www.entechtaiwan.com/util/moninfo.shtm

Лучше всего поговорить напрямую с монитором и запросить информацию EDID. Однако я видел, что он кэшируется в реестре, и у меня не возникнет проблем с его извлечением из HKLM \ SYSTEM \ CurrentControlSet \ Enum \ DISPLAY, но я не могу понять, как сопоставить данные с текущим основным монитором.

Я нашел эту программу на языке C по адресу: http://www.tech-archive.net/Archive/Development/microsoft.public.development.device.drivers/2004-08/0294.html и аналогичная программа на Python: http://www.koders.com/python/fid7FCCE3C908F376DC62F06CAD9B11C6D7C1CFA78F.aspx

К сожалению, у меня много проблем с преобразованием программы C в python, так как соответствующего кода, похоже, нет в модули win32all. Я бы попытался скомпилировать его, но у меня нет места на диске для большого компилятора, и я не использовал C в течение многих лет. Я тоже немного не в своем элементе ctypes.

Мой план Б будет заключаться в использовании EnumDisplaySettings (), чтобы найти наибольшее значение разрешения и установить его на это значение. На ПК, который я пробовал, он дает правильное разрешение, но все еще может быть проблематично.

Я бы предпочел решение на Python, но, возможно, кто-нибудь поможет мне изменить программу на C, чтобы она отображала разрешение и скомпилировала ее. Заранее спасибо.

Обновление:

Я нашел потенциальное решение. Теперь я читаю WMI, чтобы найти доступный монитор (не в автономном режиме), захватил его идентификатор устройства PNP и прочитал EDID из реестра в подразделе со значением id. Затем я анализирую данные для байтов 38 и 39 и вычисляю. Не очень чисто, но получаю результаты. Если это разумный способ сделать это, я закрою этот вопрос, спасибо.

6
задан Gringo Suave 1 December 2010 в 10:40
поделиться