2014-03-28 3 views
4

필자는 내 Windows PC에 연결된 두 대의 모니터를 가지고 있습니다. 하나는 일반 모니터이고 다른 하나는 프로젝터입니다. Windows는 일관되게 하나 또는 다른 것을 주 모니터로 할당하지 않기 때문에 (일부는 Windows가 부팅 될 때 항상 켜져있는 것이 아니기 때문에) 어떤 프로그램이 어떤 모니터인지 프로그래밍 방식으로 감지해야합니다.Win32 API를 사용하여 여러 모니터의 표시 이름을 얻는 방법은 무엇입니까?

제어판에 모니터 이름이 "HP 2159"(일반 모니터)로 표시되고 "PROJECTOR"가 기본 모니터를 선택하는 화면에 표시됩니다. 그것이 내 프로그램에서 얻고 자하는 정보입니다.

이 정보에 대해 올바른 Win32 API 함수를 찾을 수 없습니다. EnumDisplayDevicesEnumDisplayMontiors을 모두 시도했습니다. 둘 다 장치 이름으로 "DISPLAY1"및 "DISPLAY2"를 제공합니다. "HP 2159"및 "PROJECTOR"정보 또는 유사한 정보를 얻으려면 무엇을 사용해야합니까?

UPDATE :

>>> 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 코드를 참조하십시오 (Win32API PyWin 라이브러리를 통해 Win32 API에 액세스). 어쩌면 API의 PyWin 구현에 문제가있을 수 있습니까? – Ghopper21

+0

아마도 다른 사람이 도움을 줄 수 있습니다. 저는 Python 프로그래머가 아니며 PyWin에 대해 아무것도 모릅니다. –

답변

4

EnumDisplayMonitorsMonitorEnumProc 콜백 함수에 대한 모니터 핸들을 전달합니다 여기에 내가 사용 파이썬 코드입니다. 이 핸들을 GetMonitorInfo에 전달할 수 있으며 MonitorInfoEx 구조체에 대한 포인터를 전달하고 그에 따라 cbSize 멤버를 설정해야합니다.

MonitorInfoEx 구조의 szDevice 필드에는 모니터 이름이 포함됩니다.

+1

두려움이 나를 위해 작동하지 않는 - 그게 내가 이미 시도한거야, 나는 같은 "DISPLAY1"과 "DISPLAY2"이름으로. – Ghopper21