【问题标题】:windows: get number of monitors, including disabled oneswindows:获取监视器的数量,包括禁用的监视器
【发布时间】:2011-06-17 10:01:50
【问题描述】:

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

【问题讨论】:

  • 您必须直接与视频驱动程序对话。 IOCTL_VIDEO_ENUM_MONITOR_PDO,我想。记录很差。

标签: windows winapi windows-7 windows-xp


【解决方案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 有点生疏了。

【讨论】:

  • 如果我的帖子帮助您解决了您的问题,请将它们标记为“asnwered”! :) 谢谢!
  • 感谢您的回复,但我已经尝试过了(您描述的功能是我问题中的第一个词)。它不计算禁用的监视器。至少,该函数的 pywin32 端口可以,我看不出该端口将如何改变其功能。
  • 我认为如果有帮助,他会将其标记为已回答,但没有帮助
  • 我认为既然信息是正确的,他不应该将其停靠点。 API没有达到他想要的不是我的错。我只是在引用 MSDN ......他不应该因为 pywin32 对相同代码的实现效果更好而拒绝我。 :(
  • @Claudiu - 你问题中的第一个词是EnumDisplayMonitors,它与EnumDisplayDevices不同。
【解决方案2】:

您检查过显示器的显示功能吗?

我很确定 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”标志,指示设备是否处于活动状态。

【讨论】:

  • 看起来您不能在 EnumDisplayMonitors 中包含禁用的监视器,所以在阅读此答案后我仍然不确定如何获取包含显示项目的列表,以及如何检查返回的结构,用于活动标志。我猜你是说 EnumDisplayDevices 甚至应该包括非活动设备?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
相关资源
最近更新 更多