EnumDisplayMonitors
列出当前激活的所有监视器。但是,它似乎没有返回禁用的(即未选中“将我的桌面扩展到此显示器”的那些)。我如何计算包括那些残疾人在内的人数?
最佳答案
好的,所以首先你必须创建一个设备上下文:
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:
要查询当前 session 中的所有显示设备,循环调用此函数,从 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 有点生疏。
关于windows:获取监视器的数量,包括禁用的监视器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4831471/