代码之家  ›  专栏  ›  技术社区  ›  Steven

检测电源状态变化

c#
  •  3
  • Steven  · 技术社区  · 15 年前

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

    我需要根据计算机是否处于待机/休眠/关机状态执行一些操作

    2 回复  |  直到 11 年前
        1
  •  5
  •   Thomas Levesque    15 年前

    这个 SystemEvents.PowerModeChanged 活动应该做你想做的

    您可能还想查看 SystemInformation.PowerStatus 财产。

        2
  •  4
  •   Emmanuel    14 年前

    如果你需要睡眠活动,这会更好:

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