Существует множество решений для локального отключения дисплея на компьютере с Windows10. Все они представляют собой некоторую форму следующей строки SendMessage. Есть также маленькие исполняемые файлы, такие как nircmd, которые делают это. Однако, кажется, есть некоторые ограничения при запуске любого из них через OpenSSH. Поскольку мой OpenSSH настроен на использование тех же учетных данных, что и мой локальный пользователь, я не могу понять, почему ничего не происходит. Версии скрипта ps возвращают простую 1, а решения типа nircmd просто ничего не возвращают. Даже не ошибка. Любое понимание того, что может произойти здесь и как заставить это работать?

Пример скрипта:

powershell (Add-Type '[DllImport (\"user32.dll\")] ^ открытый статический extern int SendMessage (int hWnd, int hMsg, int wParam, int lParam);' -Имя a -Pas)::SendMessage (- 1,0x0112,0xF170,2)

Источник

редактировать: возможно, я должен добавить, что другие опции nircmd , такие как отключение звука, работают без проблем.

1 ответ1

0

Это связано с тем, что интерактивный сеанс Windows не является текущим сеансом, поэтому он не работает в контексте, когда физический дисплей активно подключен. Звук и другие функции есть, но дисплей привязан к сеансу. Вы можете войти в систему в интерактивном режиме или использовать что-то вроде psexec для выполнения процесса powershell в контексте пользователя. Если вы в порядке с использованием psexec, то вы можете использовать это:

 FOR /F "usebackq tokens=4" %s IN (`tasklist /nh /fo table /fi "imagename eq explorer.exe"`) DO psexec -accepteula -nobanner -d -i %s -w "%windir%" 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)

Для этого вам понадобится psexec.

Если имеется более одного интерактивного сеанса, он будет выполнен более одного раза.

При запуске из пакета вам нужно заменить оба% s на %% s.

Это часть, которая собирает интерактивный сеанс:

FOR /F "usebackq tokens=4" %s IN (`tasklist /nh /fo table /fi "imagename eq explorer.exe"`) DO echo %s

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .