Как выключить экран с клавиатуры в windows

Время на прочтение

Wake-on-Lan (WoL) — технология, которая используется (как и следует из названия) для включения компьютера посредством отправки специального пакета на адрес требуемого хоста. Но что если при помощи WoL хочется ещё и выключать компьютер?

По сути весь дальнейший текст — это ещё один способ превратить буханку хлеба в троллейбус. Но если очень хочется, то почему нет?

Если вы хотите запрограммировать автоматическое выключение ПК, то можете использовать командную строку Windows и команду shutdown. Команда shutdown позволяет автоматически выключать компьютер через определенный промежуток времени, который может варьироваться от 1 секунды до дней, недель или даже месяцев.

Эта команда, доступная во всех операционных системах Microsoft, также позволяет автоматически перезагружать компьютер или переводить его в спящий режим, выбирая, принудительно ли закрывать приложения или ожидать закрытия.

Следующее руководство можно использовать на всех компьютерах с Windows 10, Windows 11, Windows 7 и Windows Vista.

Дом  »  Windows 11   »   Выключение компьютера по таймеру в Windows 11

Таймер выключения на обычном компьютере на первый взгляд кажется не особо-то и нужной функцией. Но есть случаи, когда она может очень понадобиться! К примеру, после тяжёлого трудового дня Вы ложитесь спать просматривая какой-то новый или любимый фильм. Если Вы уснёте, то компьютер останется включённым и будет далее впустую кушать электричество. И вот тут нам на помощь придёт таймер выключения компьютера. Он есть и в Windows 10, и в Windows 11.

Нам требуется открыть окно «Выполнить». Для этого достаточно нажать комбинацию клавиш Win+R. Далее нужно ввести вот такую команду:

shutdown -s -r 3600

Цифра здесь — это время в секундах. В моём примере 3600 секунд — это 60 минут. То есть через час система выключится.
Это выглядит вот так вот:

как включить таймер Windows 11

Остаётся нажать на кнопку «ОК» и таймер в Windows 11 запустится.

Как видите, можно получить нужный результат и стандартными средствами операционной системы. Но, если захочется более продвинутого функционала — придётся ставить сторонние приложения. Тогда можно будет выключать комп даже после проигрывания определённого количества треков в проигрывателе.


По умолчанию вы можете настроить Windows так, чтобы ОС самостоятельно отключала монитор во время бездействия. На ноутбуках отключение экрана может уменьшить электропотребление и продлить время автономной работы. При запуске некоторых длительных задач или скриптов, иногда нужно сразу отключить дисплей для экономии энергии. Рассмотрим, как отключить дисплей в Windows из командной строки, с помощью ярлыка или сочетания клавиш.

Вы можете узнать время, через которое экран отключается автоматически, в параметрах схемы электропитания в графическом интерфейсе панели управления (
control.exe powercfg.cpl,,3
) или с помощью команды:

Параметры отключения дисплея в схеме электропитания windows

Subgroup GUID: 7516b95f-f776-4464-8c53-06167f40cc99 (Display)
GUID Alias: SUB_VIDEO
Power Setting GUID: 3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e (Turn off display after)
Current AC Power Setting Index: 0x000004b0

В данном примере при питании от электросети экран будет автоматически выключен через 20 мин (
0x000004b0
в HEX)

Отключать дисплей через 20 минут

Изменить время выключения экрана при работе от сети можно командой:

powercfg -change -monitor-timeout-ac 5

или при работе от батареи:
powercfg -change -monitor-timeout-dc 5

Можно отключить дисплей в Windows с помощью PowerShell. Чтобы немедленно отключить дисплей в Windows, выполните команду:

Можете создать ярлык на рабочем столе для отключения дисплея:

  1. Создайте ярлы New -> Shortcut; Создать ярлык отключения дисплея
  2. В свойствах ярлыка укажите команду:
    cmd.exe /c powershell (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)
    выключить монитор из командной строки powershell
  3. Укажите имя ярлыка;
  4. Для быстрого вызова ярлыка можно назначить ему сочетание клавиш (свойства ярлыка -> Shortcut Key -> укажите комбинацию клавиш -> в моем примере это
    Ctrl + Shift + D
    ) Отключить дисплей сочетанием клавиш Windows

Теперь, чтобы отключить монитор, нужно запустить ярлыка на рабочем столе или нажать сочетание клавиш.

Если к компьютеру подключены несколько мониторов, вы можете выключить только определенный монитор. Для этого нужно использовать утилиту ControlMyMonitor от NirSoft (https://www.nirsoft.net/utils/control_my_monitor.html).

Запустите утилиту, чтобы вывести список доступных мониторов и скопируйте данные о нужном мониторе с помощью сочетания
Ctrl + M
.

ControlMyMonitor утилита для отключения определенного монитора

Чтобы выключить определенный монитор из командной строки, выполните команду:

ControlMyMonitor.exe /TurnOff “\\.\DISPLAY2\Monitor0"

Включить второй монитор можно аппаратной кнопкой питания на нем или командой:

ControlMyMonitor.exe /TurnOn “\\.\DISPLAY2\Monitor0"

Как выключить экран с клавиатуры в windowsСколько способов выключения ПК вы знаете? В Windows 8 исчезла кнопка «Пуск», и внезапно выяснилось, что для ряда пользователей это стало огромной проблемой на пути к завершению работы системы. Сегодня я покажу вам простые альтернативные способы, которые ничуть не хуже.

Если честно, для меня стало огромным сюрпризом, что читатели моего блога жалуются на неудобства, связанные с выключением Windows 8. Мне даже немного неловко писать о таких простых и далеко не новых вещах, потому что многие описанные ниже варианты работают даже в Windows XP, не говоря уж о более новых ОС.

Думаю, что вы не сможете назвать сходу все эти способы, однако увидев их, вы непременно скажете: «Я все это знаю!» Проверим?

[+] Список способов

1. Не выключайте компьютер

На дворе 202х год, а вы все еще выключаете компьютер? Чем вас не устраивают режимы сна и гибернации, позволяющие быстрее приступать к работе в Windows?

Вот как настроен мой ноутбук, но ничто не мешает настроить рабочую станцию по аналогии.

2. Используйте кнопку питания или крышку ноутбука

Не исключаю, что у вас могут быть свои причины для полного выключения системы. Но для этого совсем не обязательно использовать программные средства.

Нажатие кнопки питания на вашем ПК или закрытие крышки ноутбука выключает Windows не менее корректно, чем системная команда.

В параметрах электропитания можно настроить действие, причем у вас есть широкий выбор.

Выключение Windows

Как видите, у меня кнопка питания включает и выключает ноутбук, а закрытие крышки отправляет его в гибернацию.

Впрочем, я уверен, что найдутся читатели, которые не захотят лезть под стол для выключения своей рабочей станции. Для них есть еще много вариантов 😉

3. Познакомьтесь с панелью Win + I

Примечание. Это не работает в Windows 10.

Это новое сочетание клавиш Windows 8 для быстрого доступа к параметрам компьютера, в том числе к вариантам завершения работы.

Выключение Windows

На планшете проведите пальцем от правого экрана к центру и на панели чудо-кнопок нажмите Параметры. Чудо-кнопки можно также вызвать наведением курсора мыши в правые углы экрана.

Любители считать щелчки мышью несомненно обратят внимание, что этот способ на один щелчок длиннее, чем в старом добром меню «Пуск». Не думаю, что один лишний щелчок в день является проблемой.

4. Не забывайте про Ctrl + Alt + Delete

Это сочетание клавиш традиционно открывает экран параметров безопасности Windows, поскольку для диспетчера задач исторически было предназначено сочетание Ctrl + Shift + Esc (предупредительный выстрел).

На этом экране есть кнопка выключения компьютера.

Кстати, на планшете такое тоже можно проделать, несмотря на отсутствие клавиатуры. У меня этот экран вызывает одновременное нажатие кнопок питания и Windows. Вряд ли у вас иначе, но в любом случае ларчик откроет руководство пользователя к вашему устройству.

5. Используйте экран блокировки

На экран блокировки можно попасть, нажав сочетание клавиш Win + L, либо свой аватар на начальном экране Windows 8. В ней затем еще нужно потянуть экран вверх, либо нажать клавишу Shift или Enter на клавиатуре.

:/>  Работа с ультра исо инструкция и ключ UltraISO 9.7.6.3829+ (на русском для Windows)

6. Alt + F4 никто не отменял

Только сначала нажмите сочетание клавиш Win + D, иначе вы закроете текущее приложение.

Выключение Windows

Кстати, в комментариях указали способ создания ярлыка для вызова этого окна. О чем еще можно мечтать? 🙂

7. Создайте специальный ярлык для команды shutdown

Щелкните правой кнопкой мыши на рабочем столе, выберите Создать – Ярлык и укажите там команду:

shutdown /s /t 0

Вместо 0 можно указать любое значение в секундах. Этот ярлык можно разместить на:

  • начальном экране Windows 8
  • рабочем столе
  • панели задач
  • контекстном меню рабочего стола или компьютера

Кроме того, в свойствах ярлыка можно указать сочетание клавиш.

Выключение Windows

А для страховки от случайных срабатываний можно даже сделать так. Кроме того, можно создать ярлыки для перевода компьютера в любые режимы с помощью psshutdown.

8. Запланируйте выключение по расписанию

Если вы живете по строгому распорядку дня, можно настроить выключение компьютера каждый день в определенное время. Достаточно одной команды с полными правами:

Schtasks.exe /Create /RL Highest /TN Shutdown /SC Daily /ST 23:57 /TR "%WINDIR%\system32\shutdown.exe /s /t 180 /c \"Чтобы отменить выключение, выполните в командной строке shutdown /a\""

Задание с именем Shutdown будет выполняться каждый день (параметр /SC) в 23:57 (параметр /ST), выключая компьютер через 3 минуты после запуска (/t 180).

Если у вас мобильный ПК, работающий от батарей, откройте планировщик заданий и в свойствах задания на вкладке «Условия» снимите флажок «Запускать только при питании от электросети».

Бонус: Задействуйте меню Win + X

Еще одно новое сочетание клавиш в Windows 8 открывает специальное меню с административными задачами, среди которых есть и завершение работы.

Выключение Windows

Мышью его можно вызвать, щелкнув правой кнопки мыши в левом нижнем углу экрана, где раньше была кнопка «Пуск».

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

Выключение Windows

Я не проверил и включил в статью, но на самом деле пункт открывал настройки электропитания 🙂 Поэтому материал пришлось срочно править. Настоящее завершение работы добавили уже в Windows 8.1.

Опрос и дискуссия

В комментариях озвучьте свой выбор в голосовании и объясните, почему вы поступаете так, а не иначе.

Заодно расскажите, о каких способах выключения ПК вы не знали! Кстати, может быть, вы знаете какие-то еще варианты завершения работы? Поделитесь ими в комментариях!

Наконец, если вы все еще недовольны тем, что в Windows 8 нет кнопки «Пуск» для выключения компьютера, поясните в комментариях, почему вас не устраивает ни один из этих способов, либо почему вам трудно объяснить любой из них окружающим вас людям.

Управление Windows: 10 важных команд

В ОС Windows есть некоторые функции, которые вы можете запустить только из командной строки (Command Prompt). Несколько из них не имеют графического интерфейса, в то же время, другие, запущенные таким образом, просто работают быстрее.

Неважно, используете ли вы PowerShell как надстройку для командной строки, или нет, все команды, о которых мы расскажем в этой статье, работают везде одинаково. Очевидно, мы не сможем охватить все команды и рассказать о каждой. Вместо этого мы сфокусируемся на тех, которые, как нам кажется, будут наиболее полезны. Даже если вы не любите работать с командной строкой.

  • Как запустить командную строку в Windows от имени администратора
  • ipconfig: Быстрая работа с сетевыми соединениями
  • ipconfig /flushdns: Очистить-сбросить кэш DNS
  • ping и tracert: Устранение проблем с сетевым подключением
  • shutdown: создание ярлыков завершения работы Windows
  • sfc /scannow: Проверка целостности системных файлов Windows
  • telnet: Подключение к серверам Telnet
  • cipher: постоянное удаление и перезапись каталога
  • netstat -an: Список сетевых подключений и портов
  • nslookup: Найдите IP-адрес по доменному имени
  • Вопросы и ответы
  • Комментарии
Как запустить, открыть командную строку от имени администратора в Windows 10, 8 или 7 💻⌨️👨‍💻

Как запустить, открыть командную строку от имени администратора в Windows 10, 8 или 7 💻⌨️👨‍💻

Как запустить командную строку в Windows от имени администратора

В Windows 10:

  1. Нажмите кнопку «Пуск» или выберите «Поиск» – начинайте вводить слово «cmd» на английском языке или «Командная строка» на русском.
  2. Сверху появится результат поиска, кликните по «Командная строка» правой кнопкой мыши и нажмите на пункт «Запуск от имени администратора».
Пуск / cmd: «Запуск от имени администратора»

В Windows 8 и 8.1:

  1. Перейдите на начальный экран, нажав кнопку «Windows» на клавиатуре или кнопку «Пуск».
  2. Справа вверху нажмите на «Поиск» и начинайте вводить слово «cmd» или «Командная Строка». Внизу откроется результат поиска.
  3. Кликните по приложению «Командная строка» правой кнопкой мыши и выберите пункт «Запуск от имени администратора».
Поиск / cmd:«Запуск от имени администратора»

В Windows 7:

  1. Нажмите на кнопку «Пуск», пройдите во вкладку «Мои программы» – далее перейдите в «Стандартные».
  2. Найдите ярлык «Командная строка» и кликните на ней правой кнопкой мыши, выбираем пункт «Запуск от имени Администратора».
Пуск / Командная строка: «Запуск от имени администратора»

Теперь приступим непосредственно к командам.

Команды CD, DIR, START, COPY, XCOPY, MD, REN, DEL, EXIT, LogOff, ShutDown командной строки 💻 📝 🥇

Команды CD, DIR, START, COPY, XCOPY, MD, REN, DEL, EXIT, LogOff, ShutDown командной строки 💻 📝 🥇

ipconfig: Быстрая работа с сетевыми соединениями

CMD: ipconfig

Чтобы использовать эту утилиту, просто введите «ipconfig» в командной строке и нажмите «Enter». В результате вы увидите список всех сетевых подключений, которые использует ваш компьютер. Посмотрите ниже надписи «адаптер беспроводной локальной сети», если вы подключены к Wi-Fi, или «Адаптер Ethernet», если вы подключены к проводной сети. Для получения более подробной информации об «ipconfig» наберите команду «ipconfig /all», в результате будет выведен список всех ключей, и, соответственно, возможностей утилиты.

ipconfig /flushdns: Очистить-сбросить кэш DNS

CMD: ipconfig /flushdns

Если вы изменили DNS-сервер в настройках сети, то данное действие не сразу вступит в силу. Windows использует кеш, в котором хранятся полученные ответы DNS, это экономит время при повторном доступе к тем же сетевым ресурсам в будущем. Чтобы Windows получала адреса от новых DNS-серверов введите команду «ipconfig /flushdns» после изменения вашего DNS-сервера.

ping и tracert: Устранение проблем с сетевым подключением

CMD: ping

Если у вас возникли проблемы с подключением к локальной сети, сети Интернет или к какому-либо веб-сайту, то в Windows есть стандартные инструменты, которыми вы можете воспользоваться для их решения.

CMD: tracert

«tracert» — это служебная утилита, предназначенная для отслеживания маршрутов следования данных в сетях TCP/IP. При вводе команды «tracert», отображается полный маршрут доставки пакета, с информацией о каждом сервере, через которые он проложен. Например, если вы введёте «tracert hetmanrecovery.com», то получите информацию о каждом узле по пути к нашему серверу, с которыми пакет взаимодействует. Если у вас возникли проблемы с подключением к веб-сайту, утилита «tracert» определит на каком этапе произошла ошибка.

shutdown: создание ярлыков завершения работы Windows

CMD: shutdown

Команда «shutdown» позволяет выключить или перезагрузить Windows из командной строки. В принципе, это более полезно для Windows 8, где стандартную кнопку «Выключение» было сложнее найти. Эту команду можно использовать для создания собственных ярлыков: «Завершение работы», «Перезагрузка», «Спящий режим» и т.д. И разместить их где вам удобно: в меню «Пуск», на рабочем столе, на панели задач..!

:/>  WPD - отключаем обновления Windows, телеметрию, службы

Чтобы использовать команду в командной строке, просто введите одно из следующих значений (все параметры команды вводятся через обратный слэш):

  • «shutdown /s /t 45» – аналог «Завершение работы» c задержкой 45 секунд.
  • «shutdown /r /t 0» – аналог «Перзагрузка».
  • «shutdown /l» – аналог «Выход из системы/Смена пользователя».
  • «shutdown /r /o» – перезагружает компьютер в Среде восстановления.

Далее приведу пример как создать ярлык для завершения работы в Windows 10.

  1. Кликните в любом пустом месте Рабочего стола правой кнопкой мыши – наведите курсор на «Создать» – из выпадающего меню выбираем «Ярлык». Сразу запустится мастер создания ярлыков.

  2. В поле «Укажите расположение объекта» прописываем строку «shutdown -s -t 45» (обратите внимание, что в данном случае все параметры нужно указывать через дефис, а не через обратный слэш), нажимаем «Далее».

    «Укажите расположение объекта»: «shutdown -s -t 45»
  3. Собственно, введите имя ярлыка в соответствующее поле и нажмите «Готово».

    Ярлык для завершения работы Windows 10
  4. Ярлык создан, но соответствующей иконки у него нет. Чтобы её поставить нажмите правой кнопкой мыши на ярлыке и выберите «Свойства» – На вкладке «Ярлык» кликните на «Сменить значок» – будет выведено сообщение системы о том, что «shutdown.exe» не содержит иконок и откроется окно выбора оной из стандартной библиотеки Windows. Выбираем понравившуюся и нажимаем два раза «Ok».

    «Сменить значок» ярлыка
  5. Теперь, ярлык можно разместить где хотите, скажем на начальном экране. Нажмите правой кнопкой мыши по ярлыку – выбираем «Закрепить на начальном экране».

    Закрепить ярлык на начальном экране

sfc /scannow: Проверка целостности системных файлов Windows

CMD: sfc /scannow

«sfc» — это стандартная утилита для проверки целостности системных файлов Windows. Она позволяет пользователю найти и восстановить недостающие системные файлы. Если, по какой-то причине, файлы отсутствуют или повреждены, то утилита просканирует их все и заменить ошибочные версии файлов исходными версиями. Кроме того, средство проверки системных файлов проверяет каталог кэша и, если потребуется, обновляет его содержимое.

Чтобы провести сканирование, нужно обязательно запустить командную строку как администратор, прописать команду «sfc /scannow» и дать программе сделать свою работу. Более подробно об «sfc /scannow» читайте здесь.

telnet: Подключение к серверам Telnet

Компоненты Windows: Клиент Telnet

Клиент протокола «telnet» в ОС Windows не установлен по умолчанию. Но это одна из её дополнительных функций, которую вы можете установить через панель управления. После установки вы сможете использовать команду «telnet» для подключения к серверам без установки дополнительного ПО, прямо из командной строки.

Просто перейдите «Пуск»«Панель управления»«Программы и компоненты» – далее кликните «Включение или отключение компонентов Windows» – находим и ставим галочку «Клиент Telnet».

cipher: постоянное удаление и перезапись каталога

CMD: cipher

Команда «сipher» обеспечивает эффективные функции шифрования и дешифрования файлов и каталогов в ОС Windows. Также у нее есть опция, которая будет перезаписывать мусорными данными свободное дисковое пространство. Это не позволит восстановить удаленные файлы и папки с помощью специализированного ПО. В ОС Windows файлы, удалённые обычным способом, остаются на диске, если вы не используете твердотельный накопитель c функцией Trim. Команда «сipher» позволяет эффективно «стереть» всё свободное пространство на диске без установки дополнительного ПО.

Например: чтобы очистить дисковое пространство на диске F:, введите команду «сipher /w:F:\». Обратите внимание, что между ключом команды (/w:) и буквой диска (F:\) нет пробела.

netstat -an: Список сетевых подключений и портов

CMD: netstat -an

nslookup: Найдите IP-адрес по доменному имени

CMD: nslookup

Это далеко не полный список всех команд, которые могут вам пригодиться. Мы дали представление о десяти полезных утилитах командной строки в ОС Windows, и надеемся, что вам будет легко пользоваться ими в будущем.

Как выполнить команду в командной строке в Windows 10, 8 или 7, вызов Win + R или через Пуск 🔨📝💻

Как выполнить команду в командной строке в Windows 10, 8 или 7, вызов Win + R или через Пуск 🔨📝💻

Параметры команды shutdown

В заключение мы объясним, каковы параметры команды выключения.

  • /i. Показать графический интерфейс.
  • /l. Выполнить выход из системы. Этот параметр нельзя использовать вместе с параметром /m или /d.
  • /s. Выключить компьютер.
  • /r. Перезагрузить компьютер.
  • /g. Перезагрузить компьютер и все зарегистрированные приложения.
  • /a. Останавливает процедуру автоматического выключения.
  • /p. Выключить компьютер без какого-либо периода ожидания и предупреждения. Этот параметр можно использовать вместе с опциями /d и /f.
  • /h. Использовать режим гибернации компьютера. Этот параметр может использоваться вместе с опцией /f.
  • /t xxx. Установить период ожидания до выключения компьютера в xxx секунд. Допустимый диапазон: 0-315360000 секунд (10 лет) для Windows 10, Windows 8.1/8 и Windows 7 и 0-600 секунд для Windows Vista.
  • /f. Принудительно закрыть запущенные приложения. Параметр /f неявный, если период ожидания больше 0 для параметра /t.
  • /?. Отображает справку для команды.

Синтаксис команды

Поиск решения

В общем, после ещё некоторого гугления выяснилось, что технология WoL подходит только для включения и на этом его полномочия всё. А менять приложение и что-то устанавливать, как уже говорил, ну совсем не хотелось и тут мелькнула простая, как топор, мысль: “А почему бы не заставить компьютер считать, что в случае, если приходит WoL-пакет, то это знак, что ему пора бы выключиться?”.

Для реализации подобных вещей идеально подходит Python, так что открываем IDE и начинаем менять смысл WoL на прямо противоположный.

Как использовать команду для выключения Windows

Давайте посмотрим, для чего используются параметры, которые мы использовали вместе с командой shutdown.

  • /s указывает на отключение системы.
  • /t xxx устанавливает период времени (всегда в секундах), после которого компьютер автоматически выключается.

Интервал времени, который мы можем использовать для программирования автоматического выключения ПК, составляет от 0 до 315360000 секунд (10 лет) в Windows 10, Windows 8.1 / 8 и Windows 7 и от 0 до 600 секунд (10 минут) в Windows Vista.

Давайте посмотрим на несколько примеров:

  • 15 минут: shutdown /s /t 900
  • 30 минут: shutdown /s /t 1800
  • 45 минут: shutdown /s /t 2700
  • 1 час: shutdown /s /t 3600
  • 2 часа: shutdown /s /t 7200
  • 24 часа: shutdown /s /t 86400
  • 2 дня: shutdown /s /t 172800
  • 1 неделя: shutdown /s /t 604800

Как отменить автоматическое выключение ПК

Автоматическое отключение ПК может быть прервано в любое время.

  1. Для этого откройте командную строку и введите: shutdown /a
  2. Затем нажмите клавишу на клавиатуре компьютера, чтобы остановить процедуру.

Как автоматически выключить Windows

Давайте посмотрим на практическом примере, как отключить Windows автоматически через 1 час.

Прежде всего нам нужно открыть командную строку Windows.

  1. Нажмите на клавиатуре компьютера клавиши (клавиша с логотипом Windows) и . Откроется окно «Выполнить».
  2. В поле Открыть: введите cmd и нажмите кнопку . Откроется командная строка.

Запрограммируйте время автоматического выключения ПК

Теперь вы можете запланировать автоматическое отключение с помощью команды shutdown.

  1. В командной строке введите: shutdown /s /t 3600
  2. Нажмитем клавишу на клавиатуре компьютера для подтверждения.
  3. Закройте командную строку.

По истечении заранее установленного периода (в данном случае 3600 секунд, то есть 1 час) компьютер будет выключен без каких-либо действий.

Проектируем

Для реализации задуманного сначала нужно разобраться, что такое WoL-пакет и из чего он сделан.

WoL-пакет или по-другому magic packet отправляется посредством UDP чаще всего на 7 или 9 порт, «весит» 102 байта и состоит из следующих частей:

  1. Символ 0xFF, повторяющийся 6 раз. Итого 6 байт;

  2. MAC-адрес целевого устройства, повторяющийся 16 раз. Размер MAC-адреса 6 байт, итого 96 байт.

:/>  Как откатить систему назад windows 8 до точки восстановления на ноутбуке

Теперь, зная это, план следующий:

  1. Определить сетевой интерфейс, на который будем отправлять WoL-пакеты и выбрать номер порта. Интерфейс желательно выбрать, т.к. на ПК может быть несколько сетевых интерфейсов, каждый со своим адресом;

  2. Получить IP и MAC-адреса выбранного интерфейса;

  3. Самостоятельно вычислить правильный WoL-пакет для выбранного интерфейса;

  4. Запустить прослушивание UDP-порта, куда собираемся отправлять WoL-пакеты;

  5. Декодировать полученные данные и затем сравнить их с тем, что получилось в п. 3 и если данные совпадают, то запустить команду завершения работы;

Реализация

Приступаем к реализации.

С первым пунктом всё просто. Название интерфейса можно посмотреть где-нибудь в настройках операционной системы. В моём случае — это Ethernet 4. Номер порта для WoL-пакетов, как уже говорилось выше, чаще всего 7 и 9. Я буду использовать 9.

WOL_PORT = 9
INTERFACE_NAME = 'Ethernet 4'

Пункт второй. Для получения IP и MAC-адресов понадобится библиотека psutil (больше никаких зависимостей устанавливать не будем).

pip install psutil

Затем пишем код для получения адресов:

import psutil
def get_ip_mac_address(interface_name: str) -> tuple: ip_addr = mac_addr = None for item in psutil.net_if_addrs()[interface_name]: addr = item.address # В IPv4-адресах разделители - точки if '.' in addr: ip_addr = addr # В MAC-адресах разделители либо тире, либо одинарное двоеточие. # Двойное двоеточие - это разделители для адресов IPv6 elif ('-' in addr or ':' in addr) and '::' not in addr: # Приводим MAC-адрес к одному формату. Формат может меняться в зависимости от ОС mac_addr = addr.replace(':', '-').upper() if not ip_addr or not mac_addr or ip_addr == '127.0.0.1': raise 'Не удалось получить IP или MAC-адрес сетевого интерфейса' return ip_addr, mac_addr

(Уже постфактум я подумал, что можно было для этого использовать значение

import socket
def run_udp_port_listener(port: int, interface_name: str): ip_addr, mac_addr = get_ip_mac_address(interface_name) server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind((ip_addr, port)) assembled_wol_packet = assemble_wol_packet(mac_addr) while True: data, _ = server_socket.recvfrom(1024)

И завершающий пункт – как обычно, ничего сложного.
Для начала декодируем данные:

decoded_packet_data = '-'.join(f'{byte:02x}' for byte in raw_bytes).upper() + '-'

Немного пояснений: полученные данные — это набор байт, так что сначала приводим данные к шестнадцатеричному виду при помощи команды byte:02x . Далее то, что получилось разделяем через знак “-” и в конце приводим к верхнему регистру.
По идее без знака тире, что здесь, что в третьем пункте можно обойтись, но с ним проще проводить отладку, если вдруг что-то идёт не так.

Затем осталось сравнить данные и запустить команду выключения ПК. Для удобства лучше обернуть декодирование и сравнение в одну функцию:

def check_is_wol_packet(raw_bytes: bytes, assembled_wol_packet: str) -> int: decoded_packet_data = '-'.join(f'{byte:02x}' for byte in raw_bytes).upper() + '-' if decoded_packet_data == assembled_wol_packet: return 1 return 0

В случае совпадения данных инициируем shutdown:

import os
# ... Здесь код запуска прослушивания порта ...
while True: data, _ = server_socket.recvfrom(1024) is_wol_packet = check_is_wol_packet(data, assembled_wol_packet) if is_wol_packet == 1: if os.name == 'posix': os.system('sudo shutdown -h now') elif os.name == 'nt': os.system('shutdown -s -t 0 -f')
И теперь соберём весь код вместе
import socket
import os
import logging
import psutil
WOL_PORT = 9
INTERFACE_NAME = 'Ethernet 4'
logging.basicConfig(format='%(levelname)s: %(asctime)s %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)
def get_ip_mac_address(interface_name: str) -> tuple: ip_addr = mac_addr = None for item in psutil.net_if_addrs()[interface_name]: addr = item.address # В IPv4-адресах разделители - точки if '.' in addr: ip_addr = addr # В MAC-адресах разделители либо тире, либо одинарное двоеточие. # Двойное двоеточие - это разделители для адресов IPv6 elif ('-' in addr or ':' in addr) and '::' not in addr: # Приводим MAC-адрес к одному формату. Формат может меняться в зависимости от ОС mac_addr = addr.replace(':', '-').upper() if not ip_addr or not mac_addr or ip_addr == '127.0.0.1': raise 'Не удалось получить IP или MAC-адрес сетевого интерфейса' return ip_addr, mac_addr
def assemble_wol_packet(mac_address: str) -> str: return f'{"FF-" * 6}{(mac_address + "-") * 16}'
def check_is_wol_packet(raw_bytes: bytes, assembled_wol_packet: str) -> int: decoded_packet_data = '-'.join(f'{byte:02x}' for byte in raw_bytes).upper() + '-' if decoded_packet_data == assembled_wol_packet: return 1 return 0
def run_udp_port_listener(port: int, interface_name: str): ip_addr, mac_addr = get_ip_mac_address(interface_name) server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind((ip_addr, port)) logger.info(f'Listening on {ip_addr}:{port}') assembled_wol_packet = assemble_wol_packet(mac_addr) while True: data, _ = server_socket.recvfrom(1024) is_wol_packet = check_is_wol_packet(data, assembled_wol_packet) if is_wol_packet == 1: if os.name == 'posix': os.system('sudo shutdown -h now') elif os.name == 'nt': os.system('shutdown -s -t 0 -f')
run_udp_port_listener(WOL_PORT, INTERFACE_NAME)

Далее можно добавить данный скрипт в автозагрузку или настроить службу, инструкций для этого в интернете хватает для любой ОС, так что про реализацию добавить больше нечего.

Автоматическая перезагрузка компьютера

Процедура, используемая для программирования автоматического перезапуска ПК, идентична той, которая используется для автоматического выключения. Единственный параметр, который нам нужно изменить, – это , который необходимо заменить на .

  1. Чтобы запланировать перезагрузку компьютера, откройте командную строку и введите: shutdown /r /t 3600
  2. Затем нажмите клавишу на клавиатуре компьютера для подтверждения.

В чём суть?

Я активно использую WoL для включения домашнего компьютера через смартфон и практически не использую физическую кнопку на корпусе ПК. Приложение для отправки WoL-пакета, которое я использую — это первое приложение, которое вылезло в Play Market’е, когда я вообще решил реализовывать эту затею. И что мне особенно в нём нравится, так это то, что у этого приложения ровно одна функция – отправить пакет на ПК. Всё.

После минутной настройки компьютер включается по нажатию одной кнопки в приложении из любой точки локальной сети. А если внести пару изменений в конфиг роутера, то и из любой точки мира, где есть интернет.

Но через какое-то время появилась потребность так же легко по нажатию одной кнопки выключать компьютер. Беглый гуглёж в русскоязычном и англоязычном интернетах подсказал, что для выключения можно поставить на компьютер какой-нибудь агент (вариантов много) и клиентское приложение на телефон и далее можно будет хоть включать ПК, хоть выключать, хоть получать доступ к файлам и много всего остального.

Так как из вышеперечисленного меня интересовали только включение и выключение, а менять приложение, к которому я привык и тем более ставить агенты на ПК мне очень не хотелось, я подумал, а нельзя ли использовать функционал WoL для выключения?

Итого

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