返回

电脑显示器枚举方法:逐一解析七种不同选择

windows

枚举计算机上显示器的终极指南

简介

对于如何枚举计算机上的显示器,有七种不同的方法,但它们提供的结果却不尽相同。这篇文章将深入探讨这些方法,解释它们的差异并指导您选择正确的枚举方法。

枚举方法

1. EnumDisplayDevices

此方法返回活动的显示设备列表,除非有一个活动的显示器和一个已连接的非活动显示器。

2. EnumDisplayMonitors

此方法返回活动的显示器列表。

3. WMIMonitorID

此方法返回已连接(不一定是活动的)显示器列表。

4. Win32_DesktopMonitor WMI

此方法仅返回一个显示器(即使有其他非活动显示器),其行为不符合预期。

5. Setup API

此方法返回已连接(不一定是活动的)显示器列表。

6. DXGI

此方法返回活动的显示器列表,并使用适配器-显示器的层次结构。

7. CCD

此方法提供目标和源之间所有可能的路径,并且似乎是最可靠的枚举方法。

结果差异

不同枚举方法提供的结果差异如下:

  • 已连接的显示器:WmiMonitorID、Setup API
  • 活动的显示器:EnumDisplayMonitors、DXGI
  • 安装的显示器:EnumDisplayDevices(在某些情况下)
  • 活动路径:CCD

适配器和显示器

DXGI、CCD 和 EnumDisplayDevices 使用适配器-显示器的层次结构,但适配器的定义因方法而异。

  • DXGI:适配器是物理图形设备。
  • CCD:适配器是连接到视频端口的设备。
  • EnumDisplayDevices:适配器是监视器的制造商。

使用场景

选择合适的枚举方法取决于您的使用场景:

  • 枚举所有已连接的显示器: WmiMonitorID、Setup API
  • 枚举所有活动的显示器: EnumDisplayMonitors、DXGI
  • 枚举所有可用的显示器(包括已连接但非活动的显示器): EnumDisplayDevices
  • 查询目标和源之间的显示路径: CCD

常见问题解答

  1. 镜像显示器如何枚举?
    如果使用 EnumDisplayMonitors、DXGI 或 CCD,则镜像的显示器将被视为一个显示器。
  2. 扩展显示器如何枚举?
    如果使用 EnumDisplayMonitors、DXGI 或 CCD,则扩展的显示器将被视为多个显示器。
  3. 如果计算机有多个显卡但没有多个输出,会怎样?
    只有活动显卡的显示器将被枚举。
  4. 在虚拟机环境中,枚举结果会如何?
    结果将取决于虚拟机配置和主机环境。
  5. 如何获取显示器的附加信息,例如分辨率和刷新率?
    可以通过其他 API 或直接查询显示驱动程序来获取这些信息。

结论

了解不同显示器枚举方法之间的差异对于选择正确的工具至关重要。本指南提供了全面概述,可帮助您根据特定需求做出明智的决定。