OnExit
指定在脚本退出时自动运行的子程序。
OnExit [, Label]
参数
重要提示: 由于调用这个指定的子程序而没有终止脚本, 所以想要终止脚本时必须在这个子程序中使用 ExitApp 命令. 可选的 (如同下面的示例部分那样), OnExit 子程序可以显示一个 MsgBox 来提示用户确认, 只有当用户按下 YES 时才会执行 ExitApp 退出脚本.
备注
当脚本由于任意原因退出时会调用 OnExit 子程序 (除非脚本是被像结束任务这样杀掉). 每当 https://www.xnip.cn/shouce/1165/74668.html 命令要求终止前一个实例时, 也会调用这个子程序.
脚本可以通过 OnMessage(0x11, "WM_QUERYENDSESSION")
检测并且可以终止系统关闭或注销操作。
OnExit 线程 不遵循 https://www.xnip.cn/shouce/1165/74627.html 中断, 包括 热键, 自定义菜单项 以及 定时子程序. 然而, 如果用户在托盘菜单或主菜单中选择 Exit, 或者通过 Reload 或 #SingleInstance 命令要求终止脚本时, 它将会终止执行 (同时脚本将退出). 因此, OnExit 子程序应该设计成快速结束, 除非用户明白自己正在做什么.
如果 OnExit 线程 遇到诸如运行时错误的失败状况, 则脚本会终止. 这样避免了有问题的 OnExit 子程序使得脚本无法终止的情况出现.
如果 OnExit 子程序是由指定退出码的 Exit 或 ExitApp 命令运行的, 则会忽略退出码. OnExit 子程序中可以使用 ExitApp 指定新的退出码.
每当脚本退出尝试调用 OnExit 子程序时, 这时会使用设置 (例如 SendMode) 的默认值开始. 这些默认值可以在 自动执行段 改变.
内置变量 A_ExitReason 为空,除非 OnExit 子程序正在运行或者在之前的退出中至少调用过一次。如果不是空的, 则它为下列单词的其中一个:
logoff | 用户正在注销. |
Shutdown | 正在关闭或重启系统, 例如使用 Shutdown 命令. |
Close | 脚本接收到 WM_CLOSE 或 WM_QUIT 消息, 出现致命错误或者正被以其他方式关闭. 尽管这些情况都是很少见的, 然而 WM_CLOSE 可能是由脚本主窗口使用 WinClose 命令发出的. 要避免这种情况,请使用 Send, !{F4} 关闭主窗口。 |
错误 | 在没有热键且不是 持续运行的 脚本中发生了运行时错误. 运行时错误的一个例子是 Run/RunWait 命令无法启动指定的程序或打开指定的文档. |
Menu | 用户在主窗口的菜单或标准托盘菜单中选择了退出. |
Exit | 使用了 Exit 或 ExitApp 命令 (包括 自定义菜单项). |
Reload | 正通过 Reload 命令或菜单项重载脚本. |
Single | 由于 #SingleInstance 的结果, 脚本正被它自身的新实例代替. |
相关
OnMessage(), RegisterCallback(), OnClipboardChange, ExitApp, Shutdown, https://www.xnip.cn/shouce/1165/74760.html, Gosub, Return, Menu
示例
"No" 时让脚本持续运行. OnExit, ExitSub return ExitSub: if A_ExitReason not in Logoff,Shutdown ; 在这行语句中, 注意不要在逗号周围含有空格. { MsgBox, 4, , Are you sure you want to exit? IfMsgBox, No return } ExitApp ; 含 OnExit 脚本终止自身的唯一方法是在 OnExit 子程序中使用 ExitApp.