Как определить, переходит ли Windows в спящий режим или приостанавливает работу?

#c# #winapi

#c# #winapi

Вопрос:

Я использую

 SystemEvents.PowerModeChanged  = new PowerModeChangedEventHandler(
    SystemEvents_PowerModeChanged
);
  

чтобы сообщить, когда Windows приостанавливает работу. Но как мне узнать, переходит ли он в спящий режим или приостанавливается?

Существует ли .Метод Net или PInvoke для этого?

Ответ №1:

Вы не можете определить разницу между спящим режимом и приостановкой.

Подробное обсуждение здесь.

Выводное сообщение заключается в том, что ваш вопрос предполагает ложную дихотомию: это может быть режим гибернации, приостановки или гибридного сна … и когда гибридный переход из режима ожидания в режим гибернации, пользовательский код даже не выполняется (на самом деле код может не выполняться, переход происходит в случае отключения питания).

Поэтому, когда принимается решение о гибридном режиме ожидания, система не знает, возобновится ли она из приостановленного режима или из гибернации, и она не может сказать вам, чего она не знает.

Ответ №2:

Согласно MSDN, значение e.Mode (ваш обработчик событий должен иметь второй параметр PowerChangedEventArgs e) будет представлять собой перечисление одного из «Возобновить», «Изменить статус» или «Приостановить». Однако, похоже, что в нем нет более подробной информации, чем эта, поэтому предполагается, что если статус Suspend, то компьютер либо спит, либо находится в спящем режиме.

HTH,

Бенджамин