EnumDisplayMonitors
列出当前激活的所有监视器。但是,它似乎没有返回禁用的(即那些“将我的桌面扩展到此监视器上”未选中的)。如何获得包括那些残疾人在内的计数?
答案 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”标志,指示设备是否处于活动状态。