我编写了一个 AHK 脚本,当按下热键
^!e::
时,它会发送一组键盘按键。该脚本需要几秒钟才能完成,但有时我需要在脚本完成其任务之前停止执行。我知道这可以通过将 ExitApp
功能设置为另一个热键来完成,但这会关闭脚本。因此,如果我需要再次触发脚本,则需要重新打开 .ahk
文件。
如何在不关闭脚本的情况下停止脚本?我还需要,当它再次触发时,它从头开始发送密钥,而不是从我停止时停止的地方发送密钥。
编辑:让我们以这段代码为例,
^!q::
SoundBeep, 208
SoundBeep, 155
SoundBeep, 208
SoundBeep, 196
SoundBeep, 208
return
解决该问题的方法是使用两个不同的脚本文件。
MainScript.ahk:
; Starts the secondary-file into its own process:
^!l::run SecondaryScript.ahk ; Ctrl+Alt+L
SecondaryScript.ahk:
#SingleInstance Force
SoundBeep, 208
SoundBeep, 155
SoundBeep, 208
SoundBeep, 196
SoundBeep, 208
ExitApp
^!q::ExitApp ; Ctrl+Alt+Q
SecondaryScript 完成代码的自动执行后,它将发出
ExitApp
这将杀死当前正在其中执行文件的进程。
如果您想中止执行,则可以使用脚本自动执行部分下定义的热键。
我发现了一个无需单独的启动器脚本即可重新启动当前脚本的技巧:
Esc::
Reload
ExitApp
显然,Reload
会重新加载当前脚本。
(注意:命令行参数不会传递到新实例。)
然后 ExitApp
确保当前实例立即终止,即使重新加载失败也是如此。
效果与 Hampus 的解决方案类似,但不需要硬编码或以其他方式在脚本中指定任何文件名,并且对于具有多个长时间运行的热键的脚本来说更加方便,这需要一个单独的脚本文件,每个热键包含启动器方法。
我在自己的脚本中为此类作业编写了此代码(通过按 🪟 winkey+W 来暂停/取消暂停脚本来激活):
#w:: ; winkey + w
Suspend, Permit ; mark the current subroutine as being exempt from suspension.
Suspend
return ; end of the subroutine