Яндекс.Метрика

OnExit -Autohotkey

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

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

OnExit [, Label]

Параметры

Label Метка подпрограммы. Если опущена, скрипт возвращается к своему нормальному поведению при выходе. Иначе параметр определяет метку, код которой будет выполнен (как новый поток), когда по какой-либо причине произойдёт выход из скрипта.

ВАЖНО: поскольку указанная подпрограмма будет выполнена вместо завершения работы скрипта, она должна содержать команду ExitApp, если всё-таки скрипт должен быть завершён. Как вариант (см. раздел примеров ниже), подпрограмма OnExit может выводить окно сообщений (MsgBox) с запросом согласия пользователя на выход, и только если пользователь нажмёт кнопку "Да", выполнять команду ExitApp.

Примечания

Назначенная OnExit подпрограмма вызывается независимо от причины завершения скрипта (кроме случая, когда он "убивается" чем-то вроде "End Task"). Она также вызывается, когда директива #SingleInstance или команда Reload просят предыдущий экземпляр скрипта завершиться.

Скрипт может отслеживать и, по желанию, отменять завершение работы операционной системы или выход из сеанса текущего пользователя через OnMessage(0x11, "WM_QUERYENDSESSION").

Подпрограмма OnExit не подчиняется директиве #MaxThreads (она будет запущена в любой момент, когда потребуется). Вдобавок, в период своего выполнения она не может быть прервана никаким другим потоком, включая потоки горячих клавиш, пунктов меню или таймеров. Однако она будет прервана (и скрипт завершится), если пользователь выберет пункт "Exit" из меню в трее (области уведомлений) или из главного меню, или если завершение скрипта является результатом директивы #SingleInstance либо команды Reload. По этой причине желательно, чтобы выполнение подпрограммы OnExit не занимало много времени, разве только пользователь знает о том, что она должна делать.

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

Если подпрограмма OnExit была запущена в ответ на команду Exit или ExitApp, в которой был задан код выхода, этот код игнорируется и становится недоступным. Новый код выхода может быть задан подпрограммой OnExit, если/когда в ней используется команда ExitApp.

Подпрограмма OnExit стартует со значениями по умолчанию для настроек, таких, как SendMode. Эти умолчания могут быть изменены в секции автовыполнения (верхняя часть скрипта).

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


Logoff Завершение сеанса пользователя.
Shutd class="ntd"own Завершение работы системы или перезагрузка. Например, через команду Shutd class="ntd"own.
Close Скрипт получил сообщения WM_CLOSE или WM_QUIT, закрывается каким-то другим способом или произошла критическая ошибка. Хотя эти ситуации не являются обычными, WM_CLOSE может быть послано командой WinClose, применённой к главному окну скрипта. Чтобы предотвратить это, закрывайте главное окно через Send, !{F4}.
Error Ошибка периода выполнения, произошедшая в скрипте, не содержащем горячих клавиш и не являющимся резидентным (т.е. не содержащем директиву #Persistent). Например, команда Run/RunWait не может запустить указанную программу или открыть документ.
Menu Пользователь выбрал пункт "Exit" в меню главного окна или в стандартном меню в трее.
Exit Была использована команда Exit или ExitApp (в том числе через пункты пользовательского меню).
Reload Скрипт перезагружается через команду Reload или пункт меню.
Single Скрипт замещается новым экземпляром самого себя, как результат действия директивы #SingleInstance.

Пример

#Persistent ; В демонстрационных целях оставляет скрипт работающим, ; если пользователь выберет "Нет". OnExit, ExitSub return ExitSub: if A_ExitReason not in Logoff,Shutd class="ntd"own ; Не ставьте пробелы до и после запятой. { MsgBox, 4, , Вы уверены, что хотите выйти? IfMsgBox, No return } ExitApp ; Единственный способ завершиться для скрипта, содержащего ; OnExit - использовать ExitApp в подпрограмме OnExit.
Теги страницы: