#c# #winapi
#c# #winapi
Вопрос:
Я использую
SystemEvents.PowerModeChanged = new PowerModeChangedEventHandler(
SystemEvents_PowerModeChanged
);
чтобы сообщить, когда Windows приостанавливает работу. Но как мне узнать, переходит ли он в спящий режим или приостанавливается?
Существует ли .Метод Net или PInvoke для этого?
Ответ №1:
Вы не можете определить разницу между спящим режимом и приостановкой.
Подробное обсуждение здесь.
Выводное сообщение заключается в том, что ваш вопрос предполагает ложную дихотомию: это может быть режим гибернации, приостановки или гибридного сна … и когда гибридный переход из режима ожидания в режим гибернации, пользовательский код даже не выполняется (на самом деле код может не выполняться, переход происходит в случае отключения питания).
Поэтому, когда принимается решение о гибридном режиме ожидания, система не знает, возобновится ли она из приостановленного режима или из гибернации, и она не может сказать вам, чего она не знает.
Ответ №2:
Согласно MSDN, значение e.Mode (ваш обработчик событий должен иметь второй параметр PowerChangedEventArgs
e) будет представлять собой перечисление одного из «Возобновить», «Изменить статус» или «Приостановить». Однако, похоже, что в нем нет более подробной информации, чем эта, поэтому предполагается, что если статус Suspend, то компьютер либо спит, либо находится в спящем режиме.
HTH,
Бенджамин