检测显示监视器的数量

时间:2013-11-28 08:54:59

标签: c#

我已经尝试过Screen.AllScreen,SystemInformation.MonitorCount和WMI,但所有这些都失败了。

我的应用程序作为Windows服务运行,因此没有可视化表单或UI。即使我有2个监视器,Screen.AllScreen和SystemInformation.MonitorCount都返回1。如果我在控制台中运行我的应用程序,它会返回正确的显示计数,但我的要求是我的应用程序作为Windows服务运行(没有UI)。

谢谢!

2 个答案:

答案 0 :(得分:5)

找到我自己的问题的答案。 仍然最终使用WMI。

我最初使用Win32_DesktopMonitor给出了一个不可靠的答案。

使用此查询:

"SELECT * FROM Win32_PnPEntity WHERE Service = 'monitor'"

WMI返回连接到我PC的正确监视器实例。

答案 1 :(得分:-2)

我使用的是Win32_PnPEntity,因为它代表了设备管理器中即插即用设备的信息,它会在您插入监视器时向您显示。查询在“搜索器”中的工作方式更可能比其他人,因为它使用Like运算符。我这样做是因为在3台不同的计算机上,设备管理器中的监视器条目显示不同例如。 (Pnp-Monitor,Pnp监视器(标准),通用Pnp监视器)。

private int CountMonitorsInstalled()
{
    try
    {
     ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "select * from Win32_PnPEntity WHERE Name LIKE '%PnP%Monitor%'");
     return searcher.Get().Count;
    }
    catch(Exception ex)
    {
      return 0;
    }

}