9

我正在使用 WMIWin32_MonitorDesktop来获取系统上的所有监视器信息。

但是它只返回一个。我已经在几台电脑上试过了,他们肯定有多个显示器,连接和工作。

ManagementObjectSearcher monitorObjectSearch = new ManagementObjectSearcher("SELECT * FROM Win32_DesktopMonitor");

foreach (ManagementObject monitor in monitorObjectSearch.Get())
{
      Debug.WriteLine(monitor["Description"]);
}

有谁知道为什么我只退回了一台显示器?

此外,如果我将 monitorObjectSearch.Get() 的返回值分配给一个变量,我将无法评估即时窗口中的 Count 属性,因为该函数总是超时。

4

4 回答 4

1

可能是显示器设置为水平跨度模式(NV 和 ATI 卡),有效地将多个显示器设置集成到一个显示器中?否则,我会继续思考..

此外,MSDN 非常明确地指出,如果将此 WMI 调用与任何 pre-vista 一起使用,它将产生不准确的结果!?

于 2009-09-14T14:58:33.147 回答
1

我尝试在许多系统(从 WinXP-SP3 到 Win10)上使用 WMI 解决这个问题,但在不同的机器上我得到了不同的结果。有两个表,可以存储当前的监视器设置。第一个是cimv2命名空间中的Win32_DesktopMonitor,第二个是wmi命名空间中的WMIMonitorID。如果其中一个只有一条记录(在多显示设置中),那么第二个将包含所有条目。

然后要获取监视器的驱动程序名称,应该在cimv2命名空间中的Win32_PnPEntity表中的这些表的记录中找到具有 PnPDeviceID 的设备。您可以在此处查看示例解决方案。

于 2016-04-22T08:27:29.820 回答
0

我在 Windows 7 机器上使用来自 wmi (win32_Desktopmonitor) 的相同代码。它在那里也不起作用,因为只返回了 1 个监视器,实际上有两个。

同样 Screen.Allscreens.Length,仅返回 1 个监视器。让系统返回两台显示器的唯一方法是将桌面扩展到两台显示器,但这不是大多数人所做的。

于 2010-12-30T19:08:17.860 回答
0

这当然不能回答您的实际问题,但找出监视器信息的最可靠方法是阅读以下注册表:

"SYSTEM\CurrentControlSet\Enum\DISPLAY\"

在下面HKEY_LOCAL_MACHINE

于 2016-04-23T21:55:50.453 回答