Современный рынок программного обеспечения настолько необъятен, что, наверное, нет такой задачи, для решения которой программистами не было создано подходящей программы. С другой стороны, нельзя не заметить, что многие из таких программ не расширяют, по большому счету, возможности пользователя, а лишь упрощают выполнение и без того простых задач. В качестве примера можно привести утилиты для выключения и/или погружения компьютера в сон по расписанию.
Да, конечно, они удобны и просты, но зачем, спрашивается, захламлять свой компьютер сторонним программным обеспечением, если то же самое можно сделать средствами операционной системы? Если вы не в курсе, скриптовый язык классического командного интерпретатора позволяет переводить компьютер в режим сна как по требованию, так и по таймеру. За отправку компьютера в сон в Windows отвечает 10 функция SetSuspendState, «зашитая» в DLL-библиотеке powrprof.dll.
Вызвать функцию можно с помощью исполняемого файла Rundll32.exe, расположенного в каталоге System32.
А вот и команда вызова:
rundll32 powrprof.dll,SetSuspendState 0,1,0
Если выполнить ее в командной строке или PowerShell, компьютер будет немедленно отправлен в сон, точнее, в гибернацию, если таковая включена. Если же гибернация отключена, компьютер будет переведен в ждущий режим.
Команду мы знаем, осталось сделать так, чтобы она выполнялась через заданное время.
Тут тоже всё просто: создайте Блокнотом текстовый файл, первой строкой вставьте в него команду timeout /t 600 /nobreak, а второй строкой rundll32 powrprof.dll,SetSuspendState 0,1,0. Число 600 условное, это количество секунд, через которое будет выполнена команда отправки ПК в сон.
Параметр /nobreak необязателен, он выводит в консоль диалог прерывания/паузы, а вообще отменить выполнение команды вы можете простым закрытием командной строки.
Сохраните файл с расширением CMD.
И запустите, дабы убедиться, что всё работает.
Выключение компьютера по таймеру
Скриптовый язык можно использовать не только для погружения компьютера в гибернацию по расписанию, но и для его выключения. Для этого в Windows 10 используется команда shutdown /s или shutdown /s /f. Замените ею вторую строку в созданном скрипте для отправки ПК в гибернацию и вот у вас уже есть скрипт для завершения работы Windows 10 по таймеру.
Более простой вариант — короткая команда shutdown /s /t 600, где /t — включение таймера, а 600 — время в секундах, оставшееся до выключения компьютера.
Дополнительно команде shutdown можно передать параметр /f, принудительно закрывающий запущенные приложения, которые могут воспрепятствовать выключению компьютера.
Да, есть еще один маленький нюанс.
Если решите использовать второй вариант выключения, создайте еще скрипт с командой shutdown /а, он позволит вам отменить запланированное выключение компьютера.
Ну вот и всё, как видите, вполне можно обойтись и без сторонних таймеров.
Осталось только сделать запуск скриптов более удобным, например, поместив их на панель задач.
Правда, закрепления BAT и CMD файлов не поддерживается Windows, но вы можете создать на скрипт ярлык, прописав в оном перед полным путем к командному файлу cmd /c, а затем перетащив созданный ярлык на панель задач.
Загрузка…
Время на прочтение
3 мин
Количество просмотров 18K
Ценность этой статьи скорее не в самом решении, а в напоминании как можно быстро решать простые задачи.
Но если Вам нужно простое решение — пожалуйста:
Сохраните в 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 ночи напролёт. По случаю написания статьи отрыл ее в старом архиве на родительском ПК. Выглядела она незатейливо, но задачу свою выполняла. Как оказалось, даже сейчас ей пользуются несколько моих знакомых.
На чём она была написана уже и не помню (VC, VB, Delphi или Assembler). Размер ее был тоже не большим, но все же 16 166 против 47 байт не идут ни в какое сравнение.
И когда пару дней назад мне понадобился такой же функционал я полез искать похожий софт. Каково же было моё разочарование, когда я нашел кучу программ в среднем от 1,1 Мб до огромных монстров 15,2 Мб размером. Естественно совесть мне не позволила даже в песочнице запустить эту ересь. Понимая что мне нужна задержка выполнения в 20 минут и вызов одной лишь процедуры я вспомнил про rundll32.exe, полез в инет и не ошибся. В итоге решение было найдено за 1 минуту.
Мораль:
Зачастую для решения простых задач нам не нужен сторонний софт. Достаточно просто зайти в поисковик и найти простое решение задачи, которое в 98,785% уже есть в свободном доступе. Конечно же нужно упомянуть и другой путь, для настоящих ИТ-шников, включить воображение, зайти в мануалы MSDN и воспользоваться готовым функционалом ОС. Согласитесь, приятно пользоваться простыми и элегантными решениями, но вдвойне приятнее когда до их решения ты дошел своим умом.
Как и обещалось ранее ссылки:
Скрипты таймеров выключения, запуска радио и перехода в спящий режим — radio_sleep_scripts.zip
Вдруг будет интересна моя старая поделка — ExitXP.exe
Надеюсь мой первый пост Вам понравился. Буду рад замечаниям и предложениям касательно статьи. Хотелось бы увидеть Ваши интересные решения похожих задач в комментариях. Спасибо что уделили время и прочли до конца.
Запланировать выключение в Windows 10 просто, но вы будете удивлены, узнав, что в Windows 10 так же сложно запланировать спящий режим. Аргумент командной строки, который утверждает, что система переводит в спящий режим, фактически переводит ее в спящий режим. Распространенный метод решения этой проблемы – сначала отключить / выключить спящий режим в Windows 10, а затем запустить команду сна с параметрами времени. Для более простого решения, которое конечные пользователи могут изменять в соответствии со своими потребностями, мы собираемся использовать пакетный сценарий и запланированную задачу.
Сценарий системы сна
Этот сценарий был написан пользователем SuperUser AveYo. Откройте Блокнот и вставьте в него следующее. Сохраните файл с расширением BAT. Если хотите, можете проверить это, запустив только скрипт. Это должно перевести вашу систему в спящий режим.
@echo off &mode 32,2 &color cf &title Power Sleep set "s1=$m='[DllImport ("Powrprof.dll", SetLastError = true)]" set "s2=static extern bool SetSuspendState(bool hibernate, bool forceCritical, bool disableWakeEvent);" set "s3=public static void PowerSleep(){ SetSuspendState(false, false, false); }';" set "s4=add-type -name Import -member $m -namespace Dll; [Dll.Import]::PowerSleep();" set "ps_powersleep=%s1%%s2%%s3%%s4%" call powershell.exe -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Bypass -Command "%ps_powersleep:"="%" exit
График сна
Теперь, когда для вашей системы доступен надежный способ перехода в спящий режим, вам нужен простой способ запланировать, когда она будет переведена в спящий режим. Планировщик заданий дает вам очень простой графический интерфейс для планирования запуска скрипта (или приложения), поэтому мы собираемся его использовать.
Откройте планировщик заданий и создайте новую задачу. Назовите его как-нибудь, что скажет вам, что он предназначен для планирования сна. Перейдите на вкладку «Триггеры» и добавьте новый триггер. Для триггера должно быть установлено значение «По расписанию». Вы найдете множество опций для планирования, то есть того, как часто следует запускать задачу, поэтому используйте ее для максимально гибкого планирования сна. После добавления триггера перейдите на вкладку Действия.
Добавьте новое действие и настройте его на запуск сценария сна, который вы создали ранее, и все готово.
Задача будет включена автоматически, и в данный момент она запустит сценарий, который переведет вашу систему в спящий режим.
Спящий режим заблокирует вашу систему и переведет ее в режим низкого энергопотребления. Ваши приложения останутся открытыми, и вы все равно войдете в систему. Вам придется вывести систему из спящего режима, нажав кнопку питания или спящего режима на своем ноутбуке / ПК, а затем разблокировать ее, как обычно. Поскольку никакие приложения не будут закрыты, вам не нужно беспокоиться о потере работы.
Современный рынок программного обеспечения настолько огромен, что, вероятно, нет проблем, для которых программисты не создали бы подходящую программу. С другой стороны, нельзя не отметить, что многие из этих программ в целом не расширяют возможности пользователя, а лишь упрощают выполнение и без того простых задач. Примером могут служить утилиты для выключения и / или перевода компьютера в спящий режим по расписанию.
Да, конечно, они удобны и просты, но зачем, задаешься вопросом, засорять компьютер сторонним софтом, если то же самое можно сделать и с помощью операционной системы? Если вы не знали, классический язык сценариев интерпретатора команд позволяет вам переводить компьютер в спящий режим, по требованию или по таймеру. В Windows 10 функция SetSuspendState отвечает за перевод компьютера в состояние ожидания DLL-библиотека powrprof.dll.
Вы можете вызвать функцию, используя исполняемый файл Rundll32.exeнаходится в каталоге System32.
А вот и команда вызова:
rundll32 powrprof.dll, SetSuspendState 0,1,0
Если вы запустите его из командной строки или PowerShell, компьютер сразу перейдет в спящий режим, точнее в спящий режим, если он включен. Если спящий режим отключен, компьютер перейдет в режим ожидания.
Команду мы знаем, осталось сделать так, чтобы она выполнялась через определенное время.
Здесь тоже все просто: создайте текстовый файл с помощью Блокнота, введите команду в первой строке тайм-аут / т 600 / без перерыва, а вторая строка rundll32 powrprof.dll, SetSuspendState 0,1,0… Число 600 условное, это количество секунд, по истечении которых будет выполнена команда на перевод ПК в спящий режим.
Параметр / nobreak является необязательным, он выводит на консоль диалог прерывания / паузы, но в целом вы можете отменить выполнение команды, просто закрыв командную строку.
Сохраните файл с расширением CMD.
И запускаем, чтобы убедиться, что все работает.
Выключение компьютера по таймеру
С помощью языка сценариев можно не только погрузить компьютер в режим гибернации по расписанию, но и выключить его. Для этого в Windows 10 используйте команду выключение / с или выключение / с / ж… Замените вторую строку на нее в созданном вами скрипте для перевода ПК в спящий режим, и теперь у вас уже есть скрипт для выключения Windows 10 по таймеру.
Более простой вариант – короткая команда останов / сек / т 600, где / t означает активацию таймера, а 600 – время в секундах, оставшееся до выключения компьютера.
При желании параметр / f можно передать команде выключения, принудительно закрыть запущенные приложениячто может предотвратить выключение компьютера.
Да, есть еще один небольшой нюанс.
Если вы решите использовать второй вариант выключения, создайте еще один скрипт с помощью команды выключение / а, позволит вам отменить запланированное выключение вашего компьютера.
Ну вот и все, как видите, без сторонних таймеров можно обойтись.
Осталось только сделать запуск скриптов удобнее, например, разместив их на панели задач.
Правда, якорь ЛЕТУЧАЯ МЫШЬ а также CMD файлы не поддерживаются Windows, но вы можете создать ярлык для сценария, написав его перед полным путем к командному файлу cmd / c, а затем перетащив созданный ярлык на панель задач.
Источник изображения: www.white-windows.ru
Download Windows Speedup Tool to fix errors and make PC run faster
You can use the Windows Task Scheduler to wake up your Windows computer wake from sleep mode, automatically at a preset time. This can be useful if you want a particular task performed at a particular time. Maybe you want to download large files at a specific time!
To wake up your Windows computer from Sleep mode at a fixed time, type Task Scheduler in Start Search and hit Enter.
On the right side, select Create Task. A new window will open. Here, under the General tab, fill in the Name and Description. Also check, Run with highest privileges.
Under the Triggers tab, click New. Another window will open. Here. Select One time (or Daily if you want it repeated every day at a particular time). Set the Date and Time when you want your Vista to wake up from Sleep.
Next, under the Actions tab, you have to mention a task. Click New. You can run a simple task, like say, first launching & then closing the command prompt window. This thus will wake your Vista machine at the pre-set time to carry out the task!
Select Action as: Start a program. To schedule a task that executes the command cmd.exe with command line arguments, copy-paste under Program/script
/c “exit”
Under Conditions tab, check on the Wake the computer to run this task check-box. This is important!
Click OK and Exit Task Scheduler.
Your computer will wake up from Sleep at a particular time.
Also see:
- Windows computer shuts down instead of Sleep
- Prevent Computer from waking up from Sleep
- Sleep Mode is not working in Windows
- Windows computer wakes from sleep automatically
- Windows will not wake up from sleep mode.
Anand Khanse is the Admin of TheWindowsClub.com, a 10-year Microsoft MVP (2006-16) & a Windows Insider MVP (2016-2022). Please read the entire post & the comments first, create a System Restore Point before making any changes to your system & be careful about any 3rd-party offers while installing freeware.