【问题标题】:Detect number of display monitor检测显示器数量
【发布时间】:2013-11-28 08:54:59
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 如果它是一项服务.... 为什么它不知道你有多少个显示器会很重要?
  • 嗯,这是我的应用需求的本质。我需要在远程电脑上运行硬件检查。

标签: c#


【解决方案1】:

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

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

使用这个查询:

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

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

【讨论】:

  • 优秀!谢谢,在这之前我到处都看不到运气,我在 Windows 7、8、8.1 上对其进行了测试,它们都可以正常工作(都是 64 位)。
【解决方案2】:

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

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;
    }

}

【讨论】:

  • 这不会编译,因为如果它在返回之前抛出,则没有返回语句。
  • 另外,您应该可以自己删除其他答案。
  • 在catch语句中添加return 0如果失败则返回0。
  • 我确实删除了我的其他答案,但是当我在 3 台电脑上测试此代码时,我不明白为什么我有 -2 它有效。当我测试标记的答案时,它仅适用于 3 台电脑中的 1 台
猜你喜欢
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多