У меня есть компьютер (Dell Optiplex 170L, Windows XP), на котором я тестирую функции пробуждения по локальной сети. У меня есть скрипт, который успешно разбудил его с помощью программы linux wakeonlan
а затем выполнил команду ping. Однако, чуть более 100 секунд после пробуждения, он снова засыпает, прерывая или мешая тому, для чего я хотел его разбудить.
2 ответа
Я заметил такое же поведение с ноутбуком Windows7. Кажется, если ноутбук проснулся с помощью WoL, то Windows относится к этому по-другому. Если в течение 2 минут на устройство не поступает никаких данных, Windows переводит его в спящий режим.
Решение состоит в том, чтобы сразу же после пробуждения сказать Windows, что она не должна переводить машину в состояние низкого энергопотребления.
SetThreadExecutionState - это функция, которую вам нужно вызвать, чтобы запретить переходам окон в режим низкого энергопотребления. В зависимости от того, с какими флагами вы его называете, эффект меняется.
Вы в основном должны позвонить
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED);
когда Windows запускается, а затем позвоните
SetThreadExecutionState(ES_CONTINUOUS);
как только ваша работа закончена.
ES_SYSTEM_REQUIRED означает для Windows, что система должна быть активна. ES_CONTINUOUS говорит, что состояние, в котором машина была установлена, то есть всегда бодрствует, должно сохраняться до тех пор, пока оно не будет изменено, вызывая ту же функцию с параметром diff. Как только ваша работа закончена, вы делаете второй звонок. Это вызывается только с ES_CONTINUOUS. Не указывая ES_SYSTEM_REQUIRED, вы сбрасываете состояние до значения по умолчанию, то есть разрешаете Windows управлять состоянием питания. И из-за ES_CONTINUOUS он останется в этом состоянии, пока не изменится.
Кстати, первый звонок не позволит Windows управлять питанием. Если у вас есть какое-либо другое программное обеспечение, которое управляет питанием, оно все равно переключит компьютер.
Я знаю, этот ответ приходит после многих месяцев первоначального вопроса, но я пишу в надежде, что он поможет следующему парню, который придет.
Я нашел этот сайт, на котором есть программное обеспечение под названием StayAwake, которое предотвращает такое засыпание из-за неактивности после WOL. К сожалению, он не дает компьютеру полностью уснуть, что переопределяет параметры питания. Тем не менее, я смог запланировать задачу, которая явно указывает компьютеру, чтобы он спал по часам в течение дня, и Wake-On-Lan все равно разбудит его точно так же, по крайней мере, теоретически. У меня все еще есть некоторые проблемы с WOL, как вы увидите в моих вопросах, но это может быть связано с аппаратным обеспечением.