Reload

使用新的脚本实例替换当前正在运行的实例.

Reload

此命令可用于需要频繁改变的脚本. 通过给此命令设置热键, 您可以在编辑器中保存修改后轻松地重启脚本.

默认情况下, 脚本也可以通过它的托盘图标主窗口来重新加载.

[v1.1.34+]: 如果 /include 开关被传递给了脚本的当前实例, 那么它将自动传递给新的实例.

任何其他传递给脚本当前实例的命令行参数都不会传递给新实例. 要传递这些参数, 请不要使用 Reload. 相反, 使用 Run 带有 A_AhkPathA_ScriptFullPath(如果脚本是以编译的形式运行, 则使用 A_IsCompiled). 另外, 将字符串 /restart 作为第一个参数(即在可执行文件的名称之后), 这告诉程序使用与 Reload 相同的行为. 另请参阅: 命令行开关和语法.

当脚本重启时, 会从它原来的工作目录启动(当它首次启动时生效的那个). 换句话说, SetWorkingDir 不会改变新实例的初始工作目录.

如果脚本无法重载(可能由于语法错误), 那么原来的实例会继续运行. 因此, reload 命令后应跟着在重载失败时您想执行的动作(例如使用 return 来退出当前子程序). 要在原来的实例中检测到失败, 请参照此例:

Reload
Sleep 1000 ; 如果成功, 则 reload 会在 Sleep 期间关闭这个实例, 所以下面这行语句永远不会执行.
MsgBox, 4,, The script could not be reloaded. Would you like to open it for editing?
IfMsgBox, Yes, Edit
return

脚本以前的实例是通过与 #SingleInstance 相同的机制来识别的, 有着同样的限制.

如果脚本允许多个实例, Reload 可能无法识别正确的实例. 最简单的方法是 Run 一个新的实例, 然后退出. 例如:

if A_IsCompiled
    Run "%A_ScriptFullPath%" /force
else
    Run "%A_AhkPath%" /force "%A_ScriptFullPath%"
ExitApp

Edit

示例

按下热键重启脚本.

^!r::Reload  ; Ctrl+Alt+R