我find了7种不同的方法来枚举连接到电脑的显示器。 但是所有的解决scheme都会给出不同的结果(监视器数量和每个监视器上的信息)。 这些解决scheme是: 使用着名的EnumDisplayDevices 使用EnumDisplayMonitors 使用Windows Management Instrumentation(WMI) : 使用以下查询:在root\\WMI名称空间中SELECT * FROM WmiMonitorID 。 再次使用WMI : 使用新的查询: SELECT * FROM Win32_DesktopMonitor位于root\\CIMV2命名空间中。 使用安装程序API : 通过首先调用SetupDiGetClassDevs来检索设备信息集,然后使用SetupDiEnumDeviceInfo 使用DirectXgraphics基础结构(DXGI) 首先使用IDXGIFactory::EnumAdapters ,然后使用IDXGIAdapter::EnumOutput 使用连接和configuration显示(CCD)API : QueryDisplayConfig (QDC_ALL_PATHS, &numPathArrayElements, pathInfoArray, &numModeInfoArrayElements, modeInfoArray, nullptr); 我试图正确地理解所有这些方法与MSDN参考之间的区别。 意见 从我观察到的情况来看: WmiMonitorID和Setup API查询返回已连接(不一定是活动)显示的列表。 Win32_DesktopMonitor WMI查询返回错误 (至less意外)结果(即使在非活动状态下,也只能枚举1个监视器,而在另一个监视器上的桌面上)。 EnumDisplayDevices返回活动设备列表(当连接其他监视器时只有1个监视器处于活动状态时除外) EnumDisplayMonitors和DXGI查询返回活动监视器的列表。 CCD似乎是最可靠的方法(提供目标和来源之间的所有可能path)。 问题 当使用这些方法时(连接显示列表,已安装显示列表,活动显示列表),我应该得到什么结果? 如果我使用镜像显示器或扩展显示器怎么办? 如果电脑有多个显卡没有多个输出? 奖金:一些方法( DXGI , EnumDisplayDevices […]