Pull to refresh

«На сон грядущий» или таймер выключения Windows из командной строки

Reading time3 min
Views20K
Ценность этой статьи скорее не в самом решении, а в напоминании как можно быстро решать простые задачи.

Но если Вам нужно простое решение — пожалуйста:

Сохраните в CMD эти строки и после запуска через 20 минут (1200 секунд) компьютер перейдет в спящий режим. Итого программа заняла 73 байт:
ping 127.0.0.1 -n 1201 > nul
rundll32 powrprof.dll,SetSuspendState 0,1,0

Но если Вам нужно именно выключить, то всё будет еще короче, а именно 47 байт. Просто вторая строка будет выглядеть:
shutdown -s -t 00

Использую это перед сном, включая свое любимое онлайн радио «на сон грядущий» так же из командной строки, о чём будет рассказано под катом.
Кому все таки стало любопытно, прошу под кат. Ссылки на готовые скрипты в конце статьи.

В большинстве своем всё новое это хорошо забытое старое.


Сначала рассмотрим что делают эти строки:

Пингуем IP адрес который всегда доступен (разве что Ваш firewall настроен «с выдумкой»). Интервал по умолчанию 1000 мс = 1 секунда. Ключ -n задает количество повторений 20 минут х 60 секунд = 1200 + 1 (т.к. первый пинг возвращается менее чем через 1 мс). А конструкция > nul говорит интерпретатору что стандартный вывод будет направляться в nul дабы избавиться от ненужного вывода на экран.
ping 127.0.0.1 -n 1201 > nul

Происходит вызов программы rundll32.exe, которая позволяет выполнить подпрограмму из динамической библиотеки. В данном случае SetSuspendState с нужными нам параметрами. Подробное описание в MSDN.
rundll32 powrprof.dll,SetSuspendState 0,1,0

Следует заметить, что если у вас включен гибридный режим сна (Hibernate), то войдет он именно в этот режим. Отключить его можно запустив от имени администратора следующее:
powercfg -hibernate off

Под спойлером еще несколько применений для примера...
Запуск моего любимого интернет радио через Winamp в отдельном потоке.
start winamp http://cast.loungefm.com.ua:8000/acoustic128

Заблокировать рабочую станцию (WIN + L).
rundll32.exe User32.dll,LockWorkStation

Гибридный режим сна (Hibernate).
rundll32.exe PowrProf.dll,SetSuspendState

Перезагрузка.
shutdown.exe -r -t 00

Старая шутка с включением режима мыши для левши (меняются левая и правая кнопка мыши).
rundll32 user32.dll,SwapMouseButton

Отменить шутку с мышкой можно вызвав диалог настройки мыши и отключив эту функцию.
rundll32 shell32.dll,Control_RunDLL main.cpl,@0,1

Переместить курсор в левый верхний угол.
rundll32 user,SetCursorPos

Расположить все не свернутые окна каскадом.
rundll32 user,CascadeChildWindows

Расположить все не свернутые окна по вертикали.
rundll32 user,TileChildWindows

Еще много интересного можно найти на просторах интернета и придумать, вспоминая документацию по WinAPI функциям.

Есть всем известное выражение которое многим нравится:


Лень – двигатель прогресса.

Немного истории:

Еще в далёком 2003 году для выключения ПК по таймеру на скорую руку писалась простенькая программка. Писал сам, ибо знакомых программистов и доступа к интернету в то время у меня не было. Уверен, что много таких же «домашних программистов», которые купив или нарезав на болванки MSDN изучали программирование под Windows ночи напролёт. По случаю написания статьи отрыл ее в старом архиве на родительском ПК. Выглядела она незатейливо, но задачу свою выполняла. Как оказалось, даже сейчас ей пользуются несколько моих знакомых.
image
На чём она была написана уже и не помню (VC, VB, Delphi или Assembler). Размер ее был тоже не большим, но все же 16 166 против 47 байт не идут ни в какое сравнение.
И когда пару дней назад мне понадобился такой же функционал я полез искать похожий софт. Каково же было моё разочарование, когда я нашел кучу программ в среднем от 1,1 Мб до огромных монстров 15,2 Мб размером. Естественно совесть мне не позволила даже в песочнице запустить эту ересь. Понимая что мне нужна задержка выполнения в 20 минут и вызов одной лишь процедуры я вспомнил про rundll32.exe, полез в инет и не ошибся. В итоге решение было найдено за 1 минуту.

Мораль:


Зачастую для решения простых задач нам не нужен сторонний софт. Достаточно просто зайти в поисковик и найти простое решение задачи, которое в 98,785% уже есть в свободном доступе. Конечно же нужно упомянуть и другой путь, для настоящих ИТ-шников, включить воображение, зайти в мануалы MSDN и воспользоваться готовым функционалом ОС. Согласитесь, приятно пользоваться простыми и элегантными решениями, но вдвойне приятнее когда до их решения ты дошел своим умом.

Как и обещалось ранее ссылки:
Скрипты таймеров выключения, запуска радио и перехода в спящий режим — radio_sleep_scripts.zip
Вдруг будет интересна моя старая поделка — ExitXP.exe


Надеюсь мой первый пост Вам понравился. Буду рад замечаниям и предложениям касательно статьи. Хотелось бы увидеть Ваши интересные решения похожих задач в комментариях. Спасибо что уделили время и прочли до конца.
Tags:
Hubs:
-11
Comments43

Articles