【问题标题】:detect power state change检测电源状态变化
【发布时间】:2010-10-16 12:28:24
【问题描述】:

检测 Windows 电源状态何时发生变化的最佳方法是什么?

我需要根据计算机是否进入待机/休眠/关机来执行一些操作

【问题讨论】:

    标签: c#


    【解决方案1】:

    SystemEvents.PowerModeChanged 事件应该做你想做的事

    您可能还想查看SystemInformation.PowerStatus 属性。

    【讨论】:

    • 我查看了 PowerModeChanged,认为这与为电脑供电有关。我错了..
    【解决方案2】:

    如果您需要睡眠事件,这会更好:

     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();
        }
    

    【讨论】:

    • 当我以物理方式关闭显示器时这是否有效?
    • 我没有收到 SystemEvents.PowerChanged 的简历事件,但这非常有效。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    相关资源
    最近更新 更多