У меня есть классика канала Telegram с инструкциями по отправке Windows в сон сочетанием клавиш. Для этого нужна лишь правильная команда, и я рекомендую утилиту psshutdown.exe -d -t 0
. А заодно объясняю, почему другой часто рекомендуемый метод с rundll32 не годится.
Но недавно за поддержкой обратился человек, у которого эти и аналогичные методы (nircmd standby
, etc) не сработали на современном ноутбуке, шедшем с Windows 11. Команды отправляли систему в гибернацию вместо сна. А при отключенной гибернации просто не имели никакого эффекта.
Я запросил доступные режимы питания и увидел ожидаемую картину.
powercfg -availablesleepstates The following sleep states are available on this system: Standby (S0 Low Power Idle) Network Connected Hibernate Fast Startup
Мобильные компьютеры приличного уровня уже лет десять вместо традиционного сна обладают режимом Modern Standby. А приемы выше на него не действуют. За неимением гербовой пишем на простой, но решение все равно нетривиальное.
Нужно выключить дисплей! На системах с Modern Standby это подает системе сигнал уходить в сон.
Встроенными средствами этого можно добиться вызовом методов Win32 API из PowerShell. Команда сразу заточена под ярлык.
powershell.exe -Command "(Add-Type '[DllImport(\"user32.dll\")]public static extern int SendMessage(int hWnd,int hMsg,int wParam,int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)"
Из сторонних решений на ум приходит nircmd с параметром monitor, тем более утилита была в арсенале автора вопроса. Заодно не надо скрывать консольное окно. Исполнять можно на выбор в двух вариантах, хотя бы один должен сработать.
nircmd monitor off nircmd monitor async_off
В общем, решение в полном соответствии с девизом блога, а заметка занимает достойное место в коллекции нестыковок.
Обсуждение завершено.