Как отключить экран с помощью PowerShell?

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

Мне нужно иметь возможность мгновенно вручную отключать экран.

Я попробовал powercfg /change monitor-timeout-ac 0, но похоже, что установка значения 0 переводит его на “никогда”. Значения такие как 0.1 также меняют его на “никогда”.

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

С этой страницы скриптов TechNet:

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)

(Запуск этой команды также блокирует рабочую станцию в Windows 10. Вам нужно будет знать пароль, чтобы войти обратно)

Запуск в 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 (и некоторого кода .NET C#)

Предыдущие решения работают, но они блокируют ввод в powershell.

Другой подход, чтобы сохранить ввод в powershell активным, это использование PostMessage вместо SendMessage.

(Add-Type "[DllImport(""user32.dll"")] public static extern int PostMessage(int hWnd, int hMsg, int wParam, int lParam);" -Name "Win32PostMessage" -Namespace Win32Functions -PassThru)::PostMessage(0xffff, 0x0112, 0xF170, 2)

Проверено на Win10 и работает

(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)

DisplayConfig – это то, что нужно использовать!

Для других людей, которые найдут этот пост, вот обходное решение:

Установите модуль DisplayConfig: PowerShell Gallery | DisplayConfig

Получите информацию о вашем дисплее (обратите внимание на ID монитора): Get-DisplayInfo

Вы должны получить что-то вроде этого:

PS C:\Users\user1> Get-DisplayInfo

 DisplayId DisplayName      Active  Primary Position    Mode           ConnectionType  --------- -----------      ------  ------- --------   
----                  --------------
         1 PHL 272V8          True     True 0 0         1920x1080@74,973 Hz      DisplayPort
         2 Mi Monitor         True    False 1920 0      3440x1440@144 Hz         DisplayPort
         3 Philips UHDTV     False    False 0 0                                         HDMI

Вы можете получить список команд, используя Get-Command -Module DisplayConfig

PS C:\Users\user1> Get-Command -Module DisplayConfig

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Copy-DisplaySource                                 1.0.5      DisplayConfig
Cmdlet          Disable-Display                                    1.0.5      DisplayConfig
Cmdlet          Disable-DisplayAdvancedColor                       1.0.5      DisplayConfig
Cmdlet          Enable-Display                                     1.0.5      DisplayConfig
Cmdlet          Enable-DisplayAdvancedColor                        1.0.5      DisplayConfig
Cmdlet          Get-DisplayColorInfo                               1.0.5      DisplayConfig
Cmdlet          Get-DisplayConfig                                  1.0.5      DisplayConfig
Cmdlet          Get-DisplayInfo                                    1.0.5      DisplayConfig
Cmdlet          Get-DisplayProfile                                 1.0.5      DisplayConfig
Cmdlet          Get-DisplayScale                                   1.0.5      DisplayConfig
Cmdlet          Set-DisplayPosition                                1.0.5      DisplayConfig
Cmdlet          Set-DisplayPrimary                                 1.0.5      DisplayConfig
Cmdlet          Set-DisplayProfile                                 1.0.5      DisplayConfig
Cmdlet          Set-DisplayRefreshRate                             1.0.5      DisplayConfig
Cmdlet          Set-DisplayResolution                              1.0.5      DisplayConfig
Cmdlet          Set-DisplayRotation                                1.0.5      DisplayConfig
Cmdlet          Set-DisplayScale                                   1.0.5      DisplayConfig
Cmdlet          Undo-DisplayConfigChanges                          1.0.5      DisplayConfig
Cmdlet          Use-DisplayConfig                                  1.0.5      DisplayConfig

Чтобы отключить любой экран, используйте команду Disable-Display [ID]

Чтобы включить любой экран, используйте команду Enable-Display [ID]

это работает идеально,

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)

но после того, как монитор включается, окно PS остается открытым. “Пробовал добавить команду “exit”, но это не сработало.

Можете помочь, пожалуйста?

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

Отключение экрана с помощью PowerShell

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

Метод 1: Использование SendMessage

Одним из наиболее распространенных способов отключения экрана является использование функции SendMessage из библиотеки user32.dll. Этот метод также включает блокировку рабочего стола, поэтому вам потребуется ввести пароль для разблокировки.

Вот команда, которую вы можете использовать:

Add-Type '[DllImport("user32.dll")]public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -PassThru)::SendMessage(-1, 0x0112, 0xF170, 2)

Примечание

Этот метод также работает на ноутбуках и различных конфигурациях дисплеев.

Метод 2: Использование PostMessage

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

Add-Type "[DllImport(""user32.dll"")] public static extern int PostMessage(int hWnd, int hMsg, int wParam, int lParam);" -Name "Win32PostMessage" -Namespace Win32Functions -PassThru)::PostMessage(0xffff, 0x0112, 0xF170, 2)

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

Метод 3: Использование модуля DisplayConfig

Для более продвинутых пользователей вы можете установить модуль DisplayConfig, который предоставляет комплексные команды для управления дисплеями. Для установки выполните:

Install-Module DisplayConfig

Получение информации о дисплеях

После установки модуля получите информацию о ваших дисплеях:

Get-DisplayInfo

Отключение экрана

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

Disable-Display [ID]

Где [ID] — это идентификатор дисплея, который вы получили в предыдущем шаге.

Включение экрана

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

Enable-Display [ID]

Заключение

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

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

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

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