如何停止正在运行的 AHK 脚本而不关闭脚本?

问题描述 投票:0回答:4

我编写了一个 AHK 脚本,当按下热键

^!e::
时,它会发送一组键盘按键。该脚本需要几秒钟才能完成,但有时我需要在脚本完成其任务之前停止执行。我知道这可以通过将
ExitApp
功能设置为另一个热键来完成,但这会关闭脚本。因此,如果我需要再次触发脚本,则需要重新打开
.ahk
文件。

如何在不关闭脚本的情况下停止脚本?我还需要,当它再次触发时,它从头开始发送密钥,而不是从我停止时停止的地方发送密钥。

编辑:让我们以这段代码为例,

^!q::
SoundBeep, 208
SoundBeep, 155
SoundBeep, 208
SoundBeep, 196
SoundBeep, 208
return
autohotkey
4个回答
1
投票

解决该问题的方法是使用两个不同的脚本文件。

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
这将杀死当前正在其中执行文件的进程。

如果您想中止执行,则可以使用脚本自动执行部分下定义的热键。


1
投票

这样做:
1.进入系统托盘()
2.右键单击符号。
3.点击暂停热键

单击暂停脚本时会发生什么?有点可怕。
例如:如果您重新映射 键,该有用键将被关闭。

希望这有帮助。


0
投票

我发现了一个无需单独的启动器脚本即可重新启动当前脚本的技巧:

Esc::
Reload
ExitApp
显然,

Reload
会重新加载当前脚本。 (注意:命令行参数不会传递到新实例。) 然后
ExitApp
确保当前实例立即终止,即使重新加载失败也是如此。

效果与 Hampus 的解决方案类似,但不需要硬编码或以其他方式在脚本中指定任何文件名,并且对于具有多个长时间运行的热键的脚本来说更加方便,这需要一个单独的脚本文件,每个热键包含启动器方法。


0
投票

我在自己的脚本中为此类作业编写了此代码(通过按 🪟 winkey+W 来暂停/取消暂停脚本来激活):

    #w:: ; winkey + w
        Suspend, Permit ; mark the current subroutine as being exempt from suspension.
        Suspend
        return ; end of the subroutine
© www.soinside.com 2019 - 2024. All rights reserved.