我已经尝试过Screen.AllScreen,SystemInformation.MonitorCount和WMI,但所有这些都失败了。
我的应用程序作为Windows服务运行,因此没有可视化表单或UI。即使我有2个监视器,Screen.AllScreen和SystemInformation.MonitorCount都返回1。如果我在控制台中运行我的应用程序,它会返回正确的显示计数,但我的要求是我的应用程序作为Windows服务运行(没有UI)。
谢谢!
答案 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;
}
}