我怎样才能从屏幕分辨率对话框在win7编程从监视器号码?

当您在“屏幕分辨率”对话框中按“识别”button时,Windows将在每台显示器上显示大量白色显示器号码。 在Windows XP中使用监视器坐标(使用EnumDisplayDevices)可以很容易地find它们,但在Windows 7上它已经损坏。 我怎样才能做到这一点?

  1. EnumDisplayDevices和GetMonitorInfo在Windows 7中不再可靠 。
  2. 我尝试了GetMonitorInfo,然后从MONITORINFOEX.szDevice(IE \。\ Display2)提取监视器号码,但没有成功。 另外一个人在两年前做了这个 ,声称getMonitorInfo有一个bug。 这个bug被Microsoft标记为没有任何评论,但仍然可以在具有最新更新的win7机器上进行复制。 (顺便说一句,有人可以告诉我 – 也许这个bug在win8上没有?)
  3. 我尝试从新的CCD API的QueryDisplayConfig ,但没有find所需的信息。

有人知道吗?

Solutions Collecting From Web of "我怎样才能从屏幕分辨率对话框在win7编程从监视器号码?"

我从来不想在我的Windows应用程序中知道显示器的数量,但是可以调用具有参数值SM_CMONITORS GetSystemMetrics函数来获取桌面上显示器的数量。

我调用我的Windows应用程序函数GetSystemMetrics主要是使用参数值SM_CXVIRTUALSCREENSM_CYVIRTUALSCREENSM_XVIRTUALSCREENSM_YVIRTUALSCREEN来避免打开应用程序窗口完全或部分在显示区域之外。 如果用户将显示区域扩展到多个显示器上,但是并非所有显示区域都打开,则应用程序窗口仍然不可见。

对于uiAction参数,具有值SPI_GETWORKAREA的SystemParametersInfo函数函数对于了解应用程序窗口的位置以及在主屏幕上的宽度和高度有多大而不会被其他窗口(条形图)部分隐藏的情况非常有用。

如果您的Windows应用程序需要来自监视器的更多信息,另请参阅GetMonitorInfo函数 。

对于支持Windows 7的WDDM的Windows版本,您可以简单地使用属于DirectX的DXGI。 DXGI允许您轻松枚举现有的显示适配器,每个适配器的可用显示输出和每个显示输出支持的显示模式。 枚举时可以读出很多额外的数据,如句柄,标识符和设备名称。 所有这些都可以很容易地用来检索工作区域。 适配器和输出的枚举顺序由系统定义,并与配置屏幕的顺序相匹配。

有关更多信息,请参阅此处: MSDN DXGI概述