C# 检查监视器';来自.net托管应用程序的电源状态

C# 检查监视器';来自.net托管应用程序的电源状态,c#,windows,winapi,C#,Windows,Winapi,我需要检查显示器/监视器的电源(是打开还是关闭?) 我尝试使用WMI,使用Win32_DesktopMonitor并检查“可用性”,但返回的值始终为3(已通电),即使在监视器实际关闭时也是如此 现在,看看StackOverflow上的几个线程,我想遵循一个方向,那就是IMSVidDevice接口的使用,但我不知道如何使用它 我有这个链接开始 它讨论了如何使用segment.h和segment.idl。还提到了msvidctl.h 我找到了一个MS Video Control 1.0类型库,它似乎

我需要检查显示器/监视器的电源(是打开还是关闭?)

我尝试使用WMI,使用Win32_DesktopMonitor并检查“可用性”,但返回的值始终为3(已通电),即使在监视器实际关闭时也是如此

现在,看看StackOverflow上的几个线程,我想遵循一个方向,那就是IMSVidDevice接口的使用,但我不知道如何使用它

我有这个链接开始

它讨论了如何使用segment.h和segment.idl。还提到了msvidctl.h

我找到了一个MS Video Control 1.0类型库,它似乎就是我要找的(它定义了IMSVidDevice接口),但我不知道如何使用这个库

        var devices = new MSVidCtlLib.MSVidOutputDevices();

        Console.WriteLine("Found {0} devices", devices.Count);

        foreach (MSVidCtlLib.IMSVidOutputDevice dev in devices)
        {
            Console.WriteLine("{0}: {1} - {2}", dev.Name, dev.Status, dev.Power);
        }
但是devices.count始终为零。我的开发设备箱上有两个监视器


我遗漏了什么?

请限制自己在每篇文章中只提一个问题,正如这里的指导原则所说的那样。如果你发布多个问题,几乎不可能接受一个回答是正确的。例如,如果我发布了问题1的答案,其他人回答了问题2,其他人回答了问题3,而另一个人回答了问题4,你如何决定选择哪一个作为接受的答案?如果您想了解更多关于什么是(或不是)好问题的信息,可以阅读。谢谢。:)当你在FAQ中阅读@KenWhite的评论时,你应该阅读问题中的签名。我删除了额外的问题,谢谢你得到了答案???嗨,Neel,没有答案。请限制你自己在每篇文章中回答一个问题,正如这里的指导原则所说的那样。如果你发布多个问题,几乎不可能接受一个回答是正确的。例如,如果我发布了问题1的答案,其他人回答了问题2,其他人回答了问题3,而另一个人回答了问题4,你如何决定选择哪一个作为接受的答案?如果您想了解更多关于什么是(或不是)好问题的信息,可以阅读。谢谢。:)当你在FAQ中阅读@KenWhite的评论时,你应该阅读问题中的签名。我删除了额外的问题,谢谢你得到了答案???嗨,Neel,没有答案。