【问题标题】:Detect if monitor is on c#检测监视器是否在c#上
【发布时间】:2010-10-12 09:03:44
【问题描述】:

是否可以使用c#检测用户监视器是否打开?

【问题讨论】:

  • 您的意思是使用前面的电源按钮,还是自动关闭以节省电量?

标签: c#


【解决方案1】:

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

【讨论】:

  • 我对 WMI 中隐藏的大量信息感到惊讶。
  • 一些通过 VGA 电缆连接的旧显示器通常是哑设备,因为它们只报告“已连接”和 EDID 信息。不存在电源状态;新显示器发生了哪些变化以便他们知道?
  • 这真的有效吗?如果我针对关闭的监视器运行代码,它仍然显示 active = true。尝试了 VGA 和 DVI 类型。也许我的显示器很笨......
  • 这不适用于我通过 VGA、DVI 和 HDMI 连接的任何显示器。它总是对所有 3 个返回 true。
  • 同理,当 Windows 将显示器切换到省电模式时,“Active”仍然为 true。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多