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

标签 windows winapi windows-7 windows-xp

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/

相关文章:

c++ - 无法在 vista 下重新创建命名管道

windows-7 - Windows 2008 远程桌面无法复制+粘贴

windows - 在 Windows 上使用 Git 添加符号链接(symbolic link)文件作为文件

python - 如何通过 python 脚本使用多处理或任何其他模块序列化 msiexec.exe 安装?

c - 在远程计算机上自动生成客户端的服务器

windows - 如何在 C++ Windows 7 中列出可用的监视器?

c++ - 如何区分外接显示器和笔记本屏幕本身?

vba - 在 msforms.textbox 中实现鼠标滚轮

c# - 如何使用 C# 和 .NET 框架创建 Windows 7 通知区域弹出窗口?

windows - (Windows) 如何锁定所有应用程序(资源管理器、任务管理器等)并仅使浏览器处于事件状态?