windows:获取监视器的数量,包括禁用的监视器

时间:2011-01-28 17:57:02

标签: windows winapi windows-7 windows-xp

EnumDisplayMonitors列出当前激活的所有监视器。但是,它似乎没有返回禁用的(即那些“将我的桌面扩展到此监视器上”未选中的)。如何获得包括那些残疾人在内的计数?

2 个答案:

答案 0 :(得分:1)

好的,首先你必须创建一个设备上下文:

http://msdn.microsoft.com/en-us/library/dd183490(v=VS.85).aspx以下代码将为您提供所有监视器:

CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL)

然后你会调用DeviceContext的EnumDisplayDevices,它将有一个指向DISPLAY_DEVICE结构的指针,该结构包含有关显示设备设置的信息http://msdn.microsoft.com/en-us/library/dd162609(v=VS.85).aspx

每个MSDN:

要查询当前会话中的所有显示设备,请在循环中调用此函数,从iDevNum设置为0开始,并递增iDevNum直到函数失败。要选择桌面中的所有显示设备,请仅使用DISPLAY_DEVICE结构中具有DISPLAY_DEVICE_ATTACHED_TO_DESKTOP标志的显示设备。

要获取有关显示适配器的信息,请调用EnumDisplayDevices,并将lpDevice设置为NULL。例如,DISPLAY_DEVICE.DeviceString包含适配器名称。

要在显示监视器上获取信息,首先调用EnumDisplayDevices,并将lpDevice设置为NULL。然后调用EnumDisplayDevices,将lpDevice设置为DISPLAY_DEVICE.DeviceName,从第一次调用EnumDisplayDevices并将iDevNum设置为零。然后DISPLAY_DEVICE.DeviceString是监视器名称。

要查询与适配器关联的所有监视器设备,请在循环中调用EnumDisplayDevices,其中lpDevice设置为适配器名称,iDevNum设置为从0开始,iDevNum设置为递增,直到函数失败。请注意,每次调用监视器信息时,DISPLAY_DEVICE.DeviceName都会更改,因此您必须保存适配器名称。当没有适配器的监视器时,该功能失败。

我不是C ++程序员,但是我必须在当天编写一些显示方式的代码,而我只是想帮助我记住的那些小东西。我在WINAPI上有点生疏。

答案 1 :(得分:-1)

您是否检查了显示器显示功能?

我很确定MONITORINFO结构的MONITORINFOF_PRIMARY标志指定哪个监视器是主监视器。任何具有MONITORINFO或MONITORINFOEX结构的监视器都是“有用的”监视器。

http://msdn.microsoft.com/en-us/library/dd145065(v=VS.85).aspx

对于哪些显示器可用,此链接允许您检查以下内容:
获取监视器信息:http://msdn.microsoft.com/en-us/library/dd144942(v=VS.85).aspx
枚举显示设备:http://msdn.microsoft.com/en-us/library/dd162609(VS.85).aspx
显示设备结构:http://msdn.microsoft.com/en-us/library/dd183569(v=VS.85).aspx

显示设备结构有一个“DISPLAY_DEVICE_ACTIVE”标志,指示设备是否处于活动状态。