Мне нужно найти "лучшее" или собственное разрешение для подключенного ЖК-монитора под 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 и вычисляю. Не очень чисто, но получаю результаты. Если это разумный способ сделать это, я закрою этот вопрос, спасибо.