Блокировка 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. Исключите драйвер и оборудование

  1. Установите поддерживаемый драйвер графики от производителя оборудования или через утвержденный канал компании.
  2. Обновите прошивку док-станции и монитора, если проблема возникает только с ними.
  3. На время теста отключите лишние USB-устройства, KVM, беспроводную мышь и датчики присутствия.
  4. Проверьте другой порт и кабель DisplayPort/HDMI/USB-C.
  5. Сравните поведение встроенного экрана ноутбука и внешнего монитора.
  6. Проверьте, не запускает ли задача по расписанию приложение сразу после блокировки.

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

Когда использовать обходной PowerShell-скрипт

Скрипт ниже подходит, если:

  • используется Windows 10 или Windows 11 в интерактивной пользовательской сессии;
  • стандартные таймеры настроены и политика не требует другого поведения;
  • powercfg /requests не показывает обоснованный запрос, который нужно сохранить;
  • нужно выключить только монитор, не переводя компьютер в сон;
  • пользователь понимает, как остановить скрипт и удалить задачу планировщика.

Он не исправляет драйвер, power request или политику. Скрипт периодически проверяет, заблокирована ли рабочая станция, ждет заданное время, повторно проверяет блокировку и отправляет Windows команду выключения монитора.

Ограничения скрипта

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

Как проверить результат

  1. Запустите скрипт вручную с коротким тестовым параметром, например 1-2 минуты.
  2. Заблокируйте компьютер и не трогайте мышь или клавиатуру.
  3. Убедитесь, что экран выключился, но сетевые задачи и приложения продолжают работать.
  4. Разблокируйте компьютер и проверьте, что цикл ожидания начинается заново.
  5. Повторите с внешним монитором и док-станцией, если они используются.
  6. Остановите скрипт и убедитесь, что штатное поведение Windows вернулось.

Официальные материалы Microsoft

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

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

PowerShell-скрипт выключения монитора после блокировки

Совместимость: Windows 10/11; Windows Server только с Desktop Experience; PowerShell 5.1 или 7; запуск в интерактивной пользовательской сессии.

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

<#
Выключение монитора после блокировки 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))
}

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