C # AC Power Connected / Disconnected events - PullRequest
1 голос
/ 21 июня 2009

Я пишу настольное приложение и хотел бы знать, есть ли какие-либо события, которые запускаются при изменении состояния питания переменного тока.

Ответы [ 4 ]

2 голосов
/ 21 июня 2009

Существует событие, которое Windows отправляет окну, когда изменяется настройка питания. Это WM_POWERBROADCAST и его wParam PBT_POWERSETTINGCHANGE . При необходимости вы можете после получения этого пула событий SystemInformation.PowerStatus, как предложил Нолдорин.

1 голос
/ 21 июня 2009

Я не верю, что в BCL есть что-то, что могло бы вызвать такое изменение. Вы действительно нуждаетесь в любом случае, учитывая частоту таких обновлений статуса?

Я бы просто опрашивал свойство SystemInformation.PowerStatus через равные промежутки времени (то есть некоторое количество секунд). Затем вы можете поднять событие, основываясь на этом, если хотите.

0 голосов
/ 20 февраля 2012

Самый простой способ - подключиться к Microsoft.Win32.SystemEvents.PowerModeChanged . Однако вам нужно посмотреть значение SystemInformation.PowerStatus, чтобы выяснить, что изменилось.

0 голосов
/ 06 февраля 2012

Я долго искал и обнаружил, что это был лучший способ, событие 'Sleep' никогда раньше не работало

 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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...