检测电源状态变化

4

如何检测Windows电源状态的变化是最佳方式?

我需要根据计算机进入待机/休眠/关机的情况执行一些动作。

2个回答

6

1
我看了一下PowerModeChanged,以为它与电脑的电源有关。我错了... - Steven

5

如果您需要一个睡眠事件,以下方法效果更佳:

 private ManagementEventWatcher managementEventWatcher;
    private readonly Dictionary<string, string> powerValues = new Dictionary<string, string>
                         {
                             {"4", "Entering Suspend"},
                             {"7", "Resume from Suspend"},
                             {"10", "Power Status Change"},
                             {"11", "OEM Event"},
                             {"18", "Resume Automatic"}
                         };
    public void InitPowerEvents()
    {
        var q = new WqlEventQuery();
        var scope = new ManagementScope("root\\CIMV2");

        q.EventClassName = "Win32_PowerManagementEvent";
        managementEventWatcher = new ManagementEventWatcher(scope, q);
        managementEventWatcher.EventArrived += PowerEventArrive;
        managementEventWatcher.Start();
    }
    private void PowerEventArrive(object sender, EventArrivedEventArgs e)
    {
        foreach (PropertyData pd in e.NewEvent.Properties)
        {
            if (pd == null || pd.Value == null) continue;
            var name = powerValues.ContainsKey(pd.Value.ToString())
                           ? powerValues[pd.Value.ToString()]
                           : pd.Value.ToString();
            Console.WriteLine("PowerEvent:"+name);
        }
    }
    public void Stop()
    {
        managementEventWatcher.Stop();
    }

当我物理关闭显示器时,这是否有效? - alap
我在使用SystemEvents.PowerChanged时并没有收到简历事件,但这个方法完美地解决了这个问题。谢谢! - David Sherret
这在我的Windows 11操作系统中无法工作。 - Rakibul

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