11

当您在“屏幕分辨率”对话框中按下“识别”按钮时,Windows 会在每台显示器上显示大白显示器编号。在 Windows XP(使用 EnumDisplayDevices)中很容易以编程方式与监视器坐标一起找到它们,但在 Windows 7 上它已损坏。我怎样才能做到这一点?

  1. EnumDisplayDevices 和 GetMonitorInfo在 Windows 7中不再可靠用于该目的。
  2. 我尝试了 GetMonitorInfo,然后从 MONITORINFOEX.szDevice (IE \.\Display2) 中提取监视器编号,但没有成功。另一个人在两年前也这样做了,并声称 getMonitorInfo 有一个错误。这个错误被微软标记为已修复,没有任何评论,但它仍然可以在具有最新更新的 win7 机器上重现。(顺便说一句,有人可以告诉我 - 也许这个错误在 win8 上不存在?)
  3. 我从新的 CCD API 尝试了 QueryDisplayConfig,但没有找到需要的信息。

有人知道路吗?

4

3 回答 3

3

Windows 不提供允许应用程序获取显示设置应用程序使用的数字的功能。这些数字本身仅特定于显示设置应用程序,在系统或用于查询/设置显示拓扑的CCD API中没有任何意义。

最好的选择是让应用程序在提示用户选择显示时定义自己的分配索引的标准。

于 2019-06-17T22:01:53.960 回答
1

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

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

具有参数值的SystemParametersInfo 函数SPI_GETWORKAREA功能对于uiAction了解应用程序窗口的位置以及它在主屏幕上的宽度和高度可以有多大也非常有用,而不会被始终位于顶部的其他窗口(栏)部分隐藏。

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

于 2014-01-25T20:07:18.197 回答
0

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

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

于 2015-01-25T05:31:43.590 回答