Reload

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

Reload

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

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

传递给原始脚本的命令行参数不会被传递给新的实例. 要传递这些参数, 请不要使用 Reload. 相反地, 把 Run 配合 A_AhkPathA_ScriptFullPath 使用(如果会以编译后的形式运行脚本, 还包括 A_IsCompiled). 此外, 使用 /restart 作为首个参数(即在可执行文件名后), 这样告诉程序要使用和 Reload 相同的动作. 另请参阅: 命令行开关和语法.

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

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

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

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

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

if A_IsCompiled
    Run Format('"{1}" /force', A_ScriptFullPath)
else
    Run Format('"{1}" /force "{2}"', A_AhkPath, A_ScriptFullPath)
ExitApp

Edit

示例

按下热键重启脚本.

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