Скрипт на BAS засыпает при выключении экрана

Поддержка
  • Столкнулся с проблемой в BAS: Как только я выключаю экрана на домашнем компе где скрипт на басе работает (только монитор ноута гаснет, а сам ноут не переходит в спящий режим), работа скрипта останавливается, как будто он "засыпает" ((( засранец

    И после того как экран гаснет, то через минуты 2-3минуты я слышу как кулер еле-еле "шуршит"

    Например, я отключаю экран нажатием клавиши F7 на клаве или утилиты:

    nircmd.exe monitor off
    

    Вот что я уже пробовал для решения этой проблемы:

    2025-01-12_144640.png 2025-01-12_144615.png

    • Настроил схему электропитания в системе через powercfg, чтобы процессор, видеокарта, сетевой адаптеры и USB-устройства продолжали работать при выключенном экране.

    • Отключил параметр "Выборочная приостановка USB" и запретил отключение сетевых адаптеров для экономии энергии.

    • Проверил, что компоненты системы не переходят в спящий режим при выключенном мониторе.

    Однако, даже так при выключении экрана скрипты всё равно прекращают работу Как бы останавливаясь на том месте где экран был потушен. Это видно по окну лога скрипта.
    Система продолжает функционировать, но скрипт просто останавливается.

    Как только мышкой пошевелил, экран загорелся и сразу же скрипт продолжает работу (лог дальше "полетел") с того места где экран был потушен.

    Есть ли в BAS какие-то настройки, позволяющие скриптам продолжать выполнение, даже если монитор выключен? Или это связано с тем, что для работы BAS требуется активное состояние экрана (например, для рендеринга графического интерфейса)? Какие есть варианты решения этой проблемы, либо в самой программе, либо на уровне системы?

  • Выключай кнопкой монитор

  • @Nikolas Тебе надо выбрать максимальная производительность режим работы.

  • @FastSpace активировал максимальную производительность
    ввёл в cmd:

    nircmd.exe monitor off
    

    Экран выключился

    Я подождал с выключенным экраном 10 минут, двинул мышку - экран включился, но вижу что в тот же момент по логу БАСа он продолжил работать.

    То есть пока экран ноута выключен BAS тоже спал(
    18548d79-0e79-4d54-b888-0d635266e89e-image.png
    932b06f8-0d19-40a8-aaee-c8c476190c12-image.png

    cf15a719-0022-47ba-827e-06903f822e4c-image.png

  • @Nikolas
    Вторая ссылка в гугле. - https://superuser.com/questions/1618452/using-nircmd-to-turn-off-monitor-instead-puts-pc-to-sleep

    Я правда не понимаю - в чем сложность написать в поиске "nircmd.exe monitor off" и пройтись хотя бы по первой пятерке выдачи?

    Проблема исключительно софтины и то, что она винду все-таки загоняет в режим сна.
    BAS тут не при чем.

  • @spam спасибо. вобщем попробовал такой пауэршеел код (то есть без использования утилиты nircmd.exe)
    Но результат такой же. Экран то гаснет, но и бас засыпает((

    Код пауэшелл:

    (Add-Type '[DllImport("user32.dll")] public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1, 0x112, 0xF170, 2)
    
  • @Nikolas facepalm.
    А какого результата ты ждал, если прямо над этой командой написано "Обновление: я также попробовал этот вызов WinAPI через PowerShell, чтобы отключить дисплей, и это также привело к переходу ПК в спящий режим:" ???

    выглядит как "Я не хочу разбираться и вникать, сделайте что-нибудь за меня."

  • @spam спасибо, нас сколько я понял - микрософт на вин10 запрещает отключения экрана без перехода в спящий режим.

    Всё ясно, значит проблему не возможно на ноуте решить.

    С обычными стационарными ПК это легко, просто кнопку на монике нажал всё

  • @Nikolas Я на своем ноуте просто закрываю крышку. Выбираю "при закрытии крышки" - "действий не требуется". Win11

  • @Nikolas said in Скрипт на BAS засыпает при выключении экрана:

    @spam спасибо, нас сколько я понял - микрософт на вин10 запрещает отключения экрана без перехода в спящий режим.

    Всё ясно, значит проблему не возможно на ноуте решить.

    С обычными стационарными ПК это легко, просто кнопку на монике нажал всё

    Уменьши яркость на минимум и открой на весь экран чёрное изображение

  • @nirvanius да, я об этом подумал и сразу же проверил, но там тоже экран гаснет и ноут уходит в сон, хотя везде стоит в режиме "ничего не предпринимать " при закрытие крышки))

  • @Fox так наверно и буду делать Даже кнопки F8 и F9 уже забиндил (яркость 0% и яркость 100%) юзая "Autohotkey" софтину , спасибо

  • @Nikolas Ну я часто так делаю, экран гаснет, но в сон не уходит. Но у меня и при открытой крышке когда монитор выключается - в сон не уходит. Может дело в винде (у меня 11) либо особенности ноута...

  • Может кому-то будет полезно вот код который делает бинд , юзая софты AutoHotkey и nircmd.exe на кнопках: F7 \F8\F9
    при нажатии на которых будет:
    Заставлять комп заснуть (режим "Сон"), либо снизить яркость до 0% , либо вернёт яркость до 100% , при этом (на кнопках F8\F9) открывается\закрывается на весь экран заранее сохранённый файл png черной картинки:

    ; Путь к лог-файлу (используем стандартную папку Documents)
    logFile := A_MyDocuments "\AutoHotkeyLog.txt"
    
    ; Полный путь к nircmd.exe в папке Downloads
    nirCmdPath := "C:\Users\Admin\Downloads\nircmd-x64\nircmd.exe"
    
    ; Полный путь к картинке, которую нужно открыть
    imagePath := "C:\Users\Admin\Downloads\black_screen.png"
    
    ; Код для F7: запуска режима сна на компьютере при этом процессы тоже засыпают
    F7::
        Sleep 100
        SendMessage, 0x112, 0xF170, 2,, Program Manager
        FileAppend, %A_Now%: F7 - Экран выключен`n, %logFile%
    return
    
    ; Код для F8: снижение яркости экрана до нуля и открытие картинки
    F8::
        if FileExist(nirCmdPath) ; Проверяем, существует ли nircmd.exe
        {
            ; Устанавливаем яркость на 0
            Run, %nirCmdPath% setbrightness 0
            FileAppend, %A_Now%: F8 - Яркость снижена до нуля`n, %logFile%
        }
        else
        {
            FileAppend, %A_Now%: F8 - nircmd.exe не найден!`n, %logFile%
            MsgBox, 16, Ошибка, NirCmd не найден в папке Downloads.
            return
        }
        
        if FileExist(imagePath) ; Проверяем, существует ли картинка
        {
            ; Открываем картинку с помощью стандартного просмотрщика Windows
            Run, %imagePath%
            Sleep 500 ; Ждем полсекунды, чтобы приложение загрузилось
            Send, {F11} ; Включаем полноэкранный режим
            FileAppend, %A_Now%: F8 - Картинка открыта в полноэкранном режиме`n, %logFile%
        }
        else
        {
            FileAppend, %A_Now%: F8 - Картинка не найдена!`n, %logFile%
            MsgBox, 16, Ошибка, Картинка не найдена по пути: %imagePath%.
        }
    return
    
    ; Код для F9: повышение яркости экрана до максимума и закрытие картинки
    F9::
        if FileExist(nirCmdPath) ; Проверяем, существует ли nircmd.exe
        {
            Run, %nirCmdPath% setbrightness 100
            FileAppend, %A_Now%: F9 - Яркость увеличена до максимума`n, %logFile%
        }
        else
        {
            FileAppend, %A_Now%: F9 - nircmd.exe не найден!`n, %logFile%
            MsgBox, 16, Ошибка, NirCmd не найден в папке Downloads.
        }
        
        ; Закрываем картинку (закрывает активное окно)
        Sleep 500 ; Ждем, чтобы яркость обновилась
        Send, !{F4} ; Отправляем Alt+F4 для закрытия активного окна
        FileAppend, %A_Now%: F9 - Картинка закрыта`n, %logFile%
    return