检测显示器是否开启 c#

15

是否有可能使用C#来检测用户的显示器是否已经打开?


1
你的意思是使用前面板上的电源按钮还是自动断电以节省功耗? - thecoop
2个回答

20

WMI可能有所帮助。

在Vista+中,有一个名为WmiMonitorBasicDisplayParams的类,其中的“Active”属性告诉您显示器是否处于活动状态。

以下是一个适用于我的示例:

using System.Management;

// ...

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"
        var active = (Boolean)wmiObj["Active"];
    }
}

7
我对WMI中隐藏的大量信息始终感到惊讶。 - Preet Sangha
1
一些通过VGA电缆连接的旧显示器通常是哑设备,因为它们仅报告“已连接”和EDID信息。没有电源状态存在;新显示器有何变化,以便它们能够告知? - kagali-san
6
这真的有效吗?如果我运行这段代码但显示器已经关闭,它依然会显示“active = true”。我已经在VGA和DVI类型的显示器上尝试了,也许我的显示器太笨了... - Rashack
3
这在我所有连接过VGA、DVI和HDMI的监视器上都不起作用。对于这三种情况它总是返回 true。 - Zenchovey
同样的问题,当Windows将显示器切换到省电模式时,“Active”仍然为真。 - LTR

4

Active属性只是告诉您Windows是否正在使用显示器。 此外,即使显示器关闭,DVI / HDMI也会报告连接。 简而言之,除了像连接光线传感器或网络摄像头并将其指向监视器电源灯之类的自制方法之外,没有其他检查方法 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接