2014-03-28 3 views
4

У меня есть два монитора, подключенные к моему ПК с ОС Windows - один из них - обычный монитор, а другой - проектор. Поскольку Windows не всегда назначает один или другой в качестве основного монитора (частично потому, что они не всегда работают при загрузке Windows), мне необходимо программно определить, какой монитор является тем, который.Как получить отображаемые имена нескольких мониторов с помощью API Win32?

На панели управления отображаются имена мониторов как «HP 2159» (обычный монитор) и «ПРОЕКТОР» на экране, где вы выбираете, который является основным монитором. Это информация, которую я хочу получить в своей программе.

Я не могу найти подходящую функцию Win32 API для этой информации. Я пробовал и EnumDisplayDevices, и EnumDisplayMontiors. Оба просто дают «DISPLAY1» и «DISPLAY2» в качестве имен устройств. Что я должен использовать, чтобы получить информацию «HP 2159» и «PROJECTOR» или что-то подобное?

UPDATE: Вот код Python Я использую:

>>> import win32api 
>>> monitors = win32api.EnumDisplayMonitors() 
>>> win32api.GetMonitorInfo(monitors[0][0]) 
{'Device': '\\\\.\\DISPLAY1', 'Work': (0, 0, 1920, 1080), 'Flags': 1, 'Monitor': (0, 0, 1920, 1080)} 
>>> win32api.GetMonitorInfo(monitors[1][0]) 
{'Device': '\\\\.\\DISPLAY2', 'Work': (1920, 0, 3360, 1080), 'Flags': 0, 'Monitor': (1920, 0, 3360, 1080)} 
+0

Отправьте свой код. Метод, который я излагаю в своем ответе, всегда работал для меня. –

+0

@ Jim Mischel - см. Код Python (доступ к API Win32 через библиотеку PyWin 'win32api'). Может быть, это что-то не так с реализацией API-интерфейса PyWin? – Ghopper21

+0

Возможно, кто-то еще может вам помочь. Я не программист на Python, и я ничего не знаю о PyWin. –

ответ

4

EnumDisplayMonitors передает монитор дескриптор функции MonitorEnumProc обратного вызова. Вы можете передать этот дескриптор GetMonitorInfo, не забудьте передать указатель на структуру MonitorInfoEx и установить соответствующий элемент cbSize.

По возвращении поле szDevice в структуре MonitorInfoEx будет содержать имя монитора.

+1

Боюсь, что это не работает для меня - это то, что я уже пробовал, и получаю те же «DISPLAY1» и «DISPLAY2», что и имена. – Ghopper21