Блокировка Windows, выключение экрана, сон и гибернация - разные состояния. После Win+L пользовательская сессия остается запущенной. Экран должен выключиться по отдельному таймеру, а компьютер может продолжать выполнять программы и сетевые задачи.
Если монитор не гаснет, сначала нужно проверить активную схему питания, отдельный таймер заблокированной консоли, запросы приложений и драйверов, групповые политики и функции оборудования. Принудительный скрипт пригоден только как обходной вариант для рабочей станции, когда причина не устраняется стандартными средствами.
Как понять, какой именно симптом наблюдается
| Симптом | Вероятная область | Что не путать |
|---|---|---|
| Экран не гаснет только после Win+L | Таймер заблокированной консоли, lock screen, политика или приложение | Обычный таймер экрана в незаблокированной сессии |
| Экран гаснет, но компьютер не засыпает | Системный idle timeout, power request, Modern Standby, устройство | Выключенный дисплей не означает сон |
| Экран сразу включается снова | Ввод с мыши, USB-устройство, датчик присутствия, драйвер или приложение | Пробуждение системы после сна |
| Проблема только на док-станции или внешнем мониторе | Драйвер графики, USB-C/DisplayPort, док, прошивка монитора | Общий таймер Windows |
| Настройки недоступны или возвращаются назад | Group Policy, MDM или профиль управления | Локальную ошибку интерфейса |
1. Проверьте два таймера экрана
Windows использует таймер выключения дисплея в обычной сессии и может отдельно применять Console Lock Display Off Timeout при заблокированной консоли. Поэтому изменение только пункта «Выключать экран через» не всегда объясняет поведение после Win+L.
Посмотреть текущие схемы и параметры можно штатной командой:
powercfg /list
powercfg /query
Microsoft документирует алиасы SUB_VIDEO, VIDEOIDLE и VIDEOCONLOCK. Изменение параметров через powercfg выполняйте только после сохранения текущих значений и с учетом питания от сети и батареи. В управляемой организации локальную настройку может переопределять политика.
2. Найдите приложения и драйверы, удерживающие экран
Windows позволяет приложению или драйверу создать Power Request и временно запретить выключение дисплея либо переход в сон. Это нужно, например, презентации, мультимедиа или длительной операции. Список активных запросов показывает команда:
powercfg /requests
| Раздел результата | Смысл | Действие |
|---|---|---|
| DISPLAY | Процесс или драйвер просит держать экран включенным | Определить приложение, завершить тестово и проверить повторно |
| SYSTEM | Запрос мешает переходу всей системы в сон | Не считать его автоматической причиной именно включенного экрана |
| AWAYMODE | Приложение использует режим фоновой работы | Проверить мультимедиа, запись и назначение процесса |
| Нет запросов | Штатный список не видит удерживающий запрос | Переходить к политике, драйверам, оборудованию и чистой загрузке |
powercfg /requestsoverride может игнорировать конкретный запрос, но применять override вслепую опасно: приложение могло удерживать экран или систему по обоснованной причине. Сначала нужно подтвердить источник и проверить обновление либо настройку самого приложения.
3. Проверьте политики и экран блокировки
- локальная Group Policy или доменная политика может задавать таймеры питания;
- MDM-профиль может регулярно возвращать утвержденные значения;
- слайд-шоу экрана блокировки способно влиять на выключение дисплея;
- режим презентации и некоторые приложения удаленного доступа могут удерживать экран;
- на Windows 11 датчик присутствия может менять поведение в зависимости от внимания пользователя.
На корпоративном компьютере не стоит исправлять политику реестром или скриптом. Сначала выясните, какое значение ожидает организация и откуда оно применяется.
4. Исключите драйвер и оборудование
- Установите поддерживаемый драйвер графики от производителя оборудования или через утвержденный канал компании.
- Обновите прошивку док-станции и монитора, если проблема возникает только с ними.
- На время теста отключите лишние USB-устройства, KVM, беспроводную мышь и датчики присутствия.
- Проверьте другой порт и кабель DisplayPort/HDMI/USB-C.
- Сравните поведение встроенного экрана ноутбука и внешнего монитора.
- Проверьте, не запускает ли задача по расписанию приложение сразу после блокировки.
Если экран выключается при чистой загрузке, причина почти наверняка находится в сторонней службе, драйвере или приложении. Возвращайте компоненты группами, пока симптом не появится снова.
Когда использовать обходной PowerShell-скрипт
Скрипт ниже подходит, если:
- используется Windows 10 или Windows 11 в интерактивной пользовательской сессии;
- стандартные таймеры настроены и политика не требует другого поведения;
powercfg /requestsне показывает обоснованный запрос, который нужно сохранить;- нужно выключить только монитор, не переводя компьютер в сон;
- пользователь понимает, как остановить скрипт и удалить задачу планировщика.
Он не исправляет драйвер, power request или политику. Скрипт периодически проверяет, заблокирована ли рабочая станция, ждет заданное время, повторно проверяет блокировку и отправляет Windows команду выключения монитора.
Ограничения скрипта
- запускать нужно в пользовательской сессии, а не как системную службу;
- скрипт работает постоянно до остановки процесса или задачи;
- он не должен применяться на сервере без Desktop Experience;
- некоторые драйверы и мониторы могут иначе обрабатывать системную команду;
- пользовательский ввод или приложение может снова включить экран;
- для постоянного использования нужна задача планировщика с запуском при входе конкретного пользователя, а не с максимальными привилегиями без необходимости.
Как проверить результат
- Запустите скрипт вручную с коротким тестовым параметром, например 1-2 минуты.
- Заблокируйте компьютер и не трогайте мышь или клавиатуру.
- Убедитесь, что экран выключился, но сетевые задачи и приложения продолжают работать.
- Разблокируйте компьютер и проверьте, что цикл ожидания начинается заново.
- Повторите с внешним монитором и док-станцией, если они используются.
- Остановите скрипт и убедитесь, что штатное поведение Windows вернулось.
Официальные материалы Microsoft
- Powercfg: параметры, power requests и диагностика
- Console Lock Display Off Timeout в Windows 10/11
- Microsoft: критерии выключения дисплея и перехода в сон
При регулярном обслуживании компьютеров лучше устранить источник неправильного поведения, а обходной скрипт оставить для подтвержденных исключений с понятной совместимостью.
Итог: сначала проверяются отдельный таймер заблокированной консоли, power requests, политики, драйверы и оборудование. Скрипт безопасно выключает только монитор в заблокированной пользовательской сессии, но не должен скрывать нерешенную причину.
PowerShell-скрипт выключения монитора после блокировки
Это обходной вариант для рабочих станций, когда стандартные параметры питания не срабатывают. Лучше запускать в пользовательской сессии через Планировщик заданий.
<#
Выключение монитора после блокировки Windows.
Скрипт работает в пользовательской сессии: проверяет, заблокирована ли рабочая
станция, ждет заданное время и повторно проверяет блокировку перед отправкой
команды выключения монитора.
#>
[CmdletBinding()]
param(
[int]$DelayMinutes = 15,
[int]$PollSeconds = 10
)
Add-Type @"
using System;
using System.Runtime.InteropServices;
public static class WdiDesktop {
[DllImport("user32.dll", SetLastError=true)]
public static extern IntPtr OpenInputDesktop(uint dwFlags, bool fInherit, uint dwDesiredAccess);
[DllImport("user32.dll", SetLastError=true)]
public static extern bool SwitchDesktop(IntPtr hDesktop);
[DllImport("user32.dll", SetLastError=true)]
public static extern bool CloseDesktop(IntPtr hDesktop);
[DllImport("user32.dll", SetLastError=true)]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
}
"@
function Test-WorkstationLocked {
$desktop = [WdiDesktop]::OpenInputDesktop(0, $false, 0x0100)
if ($desktop -eq [IntPtr]::Zero) {
return $true
}
try {
return -not [WdiDesktop]::SwitchDesktop($desktop)
} finally {
[void][WdiDesktop]::CloseDesktop($desktop)
}
}
function Set-MonitorOff {
$HWND_BROADCAST = [IntPtr]0xffff
$WM_SYSCOMMAND = 0x0112
$SC_MONITORPOWER = [IntPtr]0xf170
$MONITOR_OFF = [IntPtr]2
[void][WdiDesktop]::SendMessage($HWND_BROADCAST, $WM_SYSCOMMAND, $SC_MONITORPOWER, $MONITOR_OFF)
}
$lockedSince = $null
$delay = [TimeSpan]::FromMinutes([Math]::Max(1, $DelayMinutes))
while ($true) {
if (Test-WorkstationLocked) {
if ($null -eq $lockedSince) {
$lockedSince = Get-Date
}
if ((Get-Date) - $lockedSince -ge $delay) {
if (Test-WorkstationLocked) {
Set-MonitorOff
}
$lockedSince = Get-Date
}
} else {
$lockedSince = $null
}
Start-Sleep -Seconds ([Math]::Max(5, $PollSeconds))
}
Важно: перед запуском проверьте код под свою задачу, сохраните важные данные и не используйте административные скрипты из интернета без понимания каждого действия.