C# 检查监视器是否已连接

C# 检查监视器是否已连接,c#,status,monitor,C#,Status,Monitor,我必须制作一个简单的程序,向服务器报告监视器的状态(是开/关还是未连接)。 到目前为止,我使用的是我在另一次讨论中发现的这个方法,但它每次都会返回到真值,即使我断开了显示器的连接 public static Boolean isMonitorActive() { Boolean active = false; var query = "select * from WmiMonitorBasicDisplayParams";

我必须制作一个简单的程序,向服务器报告监视器的状态(是开/关还是未连接)。 到目前为止,我使用的是我在另一次讨论中发现的这个方法,但它每次都会返回到真值,即使我断开了显示器的连接

public static Boolean isMonitorActive() 
        {
            Boolean active = false;
            var query = "select * from WmiMonitorBasicDisplayParams";
            using (var wmiSearcher = new ManagementObjectSearcher("\\root\\wmi", query))
            {
                var results = wmiSearcher.Get();
                foreach (ManagementObject wmiObj in results)
                {
                    // get the "Active" property and cast to a boolean, which should 
                    // tell us if the display is active. I've interpreted this to mean "on"
                    active = (Boolean)wmiObj["Active"];
                    return active;
                }
            }
            return active;
        }
我必须每2-3分钟检查一次监视器的状态,所以我需要在系统中使用与MonitorCout变量不同的东西,因为它已经初始化,并且从程序的开始到结束都保持不变(如果我没有弄错的话)。
感谢阅读和帮助。

这里有一个方法:@wonko79
AllScreens
在程序中仅静态初始化一次,因此如果用户断开显示器,之后不会更改。这在我给出的链接中的答案中得到了解决。@MatthewWatson正如我在问题中所说的,我不能使用所有屏幕,因为我必须检查监视器在程序执行过程中何时断开连接。@user2190639是的,但请看-它给出了一个使用Windows API
EnumDisplayMonitors()
函数的解决方案。噢,谢谢!我错过了那部分。无论如何,我不知道问题是否是因为我在笔记本电脑上,但当我连接外部显示器并拔下插头进行测试时,我总是得到monCount=1。代码似乎很难工作,因为当我使用2监视器monCount=2时