Выключить дисплей в Windows по команде

Вопрос или проблема

Есть ли способ выключить дисплей в Windows (7), желательно без использования дополнительного программного обеспечения?

Скрипт PowerShell работает отлично, но оставляет окно командной строки после включения дисплея.

Еще пару вариантов:

  • Выключить ЖК-экран – просто поместите исполняемый файл на рабочий стол
  • NirCmd – вам нужно скопировать nircmd.exe в директорию Windows, или добавить его местоположение в переменную окружения PATH. Затем просто выполните nircmd monitor off из командной строки. Более подробную информацию можно найти по ссылке.

На ноутбуке вы можете использовать комбинацию клавиш Fn+F7 (F7 может отличаться в зависимости от модели ноутбука), а на стационарном компьютере вы всегда можете использовать кнопку питания.

Нужны ли вам какие-либо другие параметры, такие как пробуждение при движении мыши или что-то еще?

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

%systemroot%\system32\scrnsave.scr /s

Это не выключит экран, но сделает его полностью черным.

Вы можете использовать вызов WinAPI SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2), где HWND_BROADCAST = 0xFFFF,
WM_SYSCOMMAND = 0x0112 и SC_MONITORPOWER = 0xF170. 2 означает, что дисплей отключается.

Существует несколько способов вызвать это:

  • Отдельный исполняемый файл. Вы можете запустить его через скрипт, командную строку, окно Выполнить, ярлык (*.lnk), и т.д. Обратите внимание, что ярлыки можно запускать с помощью сочетания клавиш. Исполняемый файл может быть написан на C или C++, или с помощью P/Invoke на языках .NET (C# или PowerShell), или на многих других языках, которые имеют интерфейс взаимодействия с другими языками (например, JNI в Java).

  • Скрипт AutoHotkey скрипт. Для непрофессионала этот способ, вероятно, проще. Создание пользовательских настроек требует некоторого сценарирования. Этот скрипт отключает монитор при нажатии Win + M:

    #m::
    Sleep 1000
    SendMessage, 0x112, 0xF170, 2,, Program Manager
    return
    

Обратите внимание на тайм-аут перед вызовом SendMessage в скрипте AutoHotkey. Это дает пользователю возможность отпустить клавиши (в случае, если их отпускание разбудит монитор снова). Не забывайте об этом, даже когда вызываете из скрипта на другом языке.

Для получения дополнительной информации смотрите документацию функции SendMessage, сообщения WM_SYSCOMMAND и AutoHotkey SendMessage. Может быть интересно, что с Windows 8 использование того же метода для включения монитора не работает, но есть обходной путь.

Однострочный скрипт PowerShell будет следующим:

(Add-Type -MemberDefinition "[DllImport(""user32.dll"")]`npublic static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);" -Name "Win32SendMessage" -Namespace Win32Functions -PassThru)::SendMessage(0xffff, 0x0112, 0xF170, 2)

В виде однострочника, например, используя Win+R:

powershell -command $obj = Add-Type -MemberDefinition '[DllImport(""""user32.dll"""")] public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name fn -Namespace ns -PassThru; $obj::SendMessage(0xffff, 0x0112, 0xF170, 2)

К сожалению, невозможно вставить это в файл ярлыка .lnk, так как строка слишком длинная, я запускаю это с помощью Flow Launcher и своего плагина Favorites, который поддерживает длинные командные строки.

https://github.com/stax76/Flow.Launcher.Plugin.Favorites

На основе ответа Уджвала Синга вот скрипт на Python для этого.

Сначала установите pywin32 модуль, если вы этого еще не сделали.

$ python -m pip install pywin32

Вот скрипт:

from win32api import SendMessage

SendMessage(
    # https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessage?redirectedfrom=MSDN#parameters
    0xFFFF,  # HWND_BROADCAST
    # https://docs.microsoft.com/en-us/windows/win32/menurc/wm-syscommand
    0x0112,  # WM_SYSCOMMAND
    0xF170,  # SC_MONITORPOWER
    2,  # экран отключается
)

Или, если вы предпочитаете однострочник для запуска прямо из командной строки:

$ python -c "import win32api; win32api.SendMessage(0xFFFF, 0x0112, 0xF170, 2)"

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

Используя NirCmd.

После установки

  • создайте новый ярлык на рабочем столе

  • В поле расположения введите:

    C:\Path\To\nircmd.exe monitor off

(Замените C:\Path\To\ на актуальный путь, где вы сохранили nircmd.exe.)

Назовите ярлык (например, “Выключить экран”) и всё готово.

Ссылка на загрузку 🖇️ https://www.nirsoft.net/utils/nircmd.html#google_vignette

Ответ или решение

Как выключить дисплей в Windows 7 с помощью командной строки

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

1. Использование PowerShell

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

(Add-Type -MemberDefinition "[DllImport(""user32.dll"")]`npublic static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);" -Name "Win32SendMessage" -Namespace Win32Functions -PassThru)::SendMessage(0xffff, 0x0112, 0xF170, 2)

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

2. Автоматизация через AutoHotkey

Если вы предпочитаете более простой путь, AutoHotkey является удобным инструментом для автоматизации задач. Вот пример скрипта AutoHotkey, который отключает монитор при нажатии сочетания клавиш Win + M:

#m::
Sleep 1000
SendMessage, 0x112, 0xF170, 2,, Program Manager
return

Не забудьте установить AutoHotkey, а затем создать новый скрипт с приведенным выше кодом. Скрипт ждет миллисекунду, чтобы избежать случайного пробуждения дисплея при отпускании клавиш.

3. Использование NirCmd

NirCmd — это утилита, которая предоставляет множество возможностей для управления Windows. Вы можете просто скачать nircmd.exe, разместить его в системе или добавить расположение к переменной окружения PATH, а затем создать ярлык:

  1. Скачайте NirCmd с официального сайта.
  2. Создайте новый ярлык на рабочем столе.
  3. В поле расположения укажите:

    C:\Path\To\nircmd.exe monitor off

Не забудьте заменить C:\Path\To\ на актуальный путь к nircmd.exe. Дайте ярлыку информативное название, например "Выключить экран".

4. Программный подход с использованием Python

Если вы знакомы с Python и хотите использовать его для отключения компьютера, вы можете воспользоваться библиотекой pywin32. Сначала установите библиотеку:

python -m pip install pywin32

Затем вы можете использовать следующий скрипт:

from win32api import SendMessage

SendMessage(
    0xFFFF,  # HWND_BROADCAST
    0x0112,  # WM_SYSCOMMAND
    0xF170,  # SC_MONITORPOWER
    2,  # отключение дисплея
)

Для выполнения кода в командной строке достаточно ввести:

python -c "import win32api; win32api.SendMessage(0xFFFF, 0x0112, 0xF170, 2)"

5. Использование встроенных возможностей Windows

Кроме вышеописанных методов, вы можете воспользоваться комбинацией клавиш на ноутбуках (например, Fn + F7, но она может варьироваться в зависимости от модели) для быстрого отключения дисплея или использовать кнопку питания для перехода в спящий режим.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...