如何使用Win32 API获取多个显示器的显示名称?

时间:2014-03-28 23:17:33

标签: windows winapi pywin32

我有两台显示器连接到我的Windows PC - 一台是普通显示器,另一台是投影仪。因为Windows并不总是将一个或另一个指定为主监视器(部分原因是因为它们在Windows启动时并不总是都打开),所以我需要以编程方式检测哪个监视器是哪个监视器。

控制面板将显示器的名称显示为" HP 2159" (正常的监视器)和" PROJECTOR"在您选择哪个是主监视器的屏幕中。这是我想要在我的程序中获得的信息。

我无法为此信息找到合适的Win32 API函数。我已经尝试了EnumDisplayDevicesEnumDisplayMontiors。两者都只是给出" DISPLAY1"和" DISPLAY2"作为设备名称。我应该用什么来获得" HP 2159"和" PROJECTOR"信息或类似的东西?

更新:这是我使用的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)}

1 个答案:

答案 0 :(得分:3)

EnumDisplayMonitors将监视器句柄传递给MonitorEnumProc回调函数。您可以将该句柄传递给GetMonitorInfo,确保将指针传递给MonitorInfoEx结构并相应地设置cbSize成员。

返回后,szDevice结构中的MonitorInfoEx字段将包含监视器的名称。