如何使用启动它的键停止自动热键中的无限循环

Ste*_*ion 4 loops autohotkey toggle

所以我刚开始使用 autohotkey 并且我制作了这个脚本来在一个叫做流放之路的游戏中发送垃圾邮件,它工作得很好,但是当我再次按下 f1 时我无法让它停止,我已经尝试了无数次,但是循环不会停止

#MaxThreads 2
wintitle=Path of Exile
SetTitleMatchMode,2
DetectHiddenWindows,On
setkeydelay,2500,0
f1::
toggle:=!toggle
Loop
{
  if toggle
    controlsend,,{enter}{up}{enter}, %wintitle%
  else
    break
}
return
Run Code Online (Sandbox Code Playgroud)

Sid*_*Sid 5

我认为您最好为此使用SetTimer。当涉及到切换时,循环不是很容易使用。

i := 0
toggle := 0
F1::
    toggle := !toggle
    if (toggle) {
        SetTimer, Timer_Spam, 10
    } else {
        SetTImer, Timer_Spam, Off
    }
return

Timer_Spam:
    TrayTip, Counter, %i%
    i++
return
Run Code Online (Sandbox Code Playgroud)

你的循环不起作用的原因是因为一旦你进入循环,程序就会卡在那里,所以要离开你需要从循环内部工作。

您可以使用GetKeyState()执行此操作,但是您不能使用相同的键来打开和关闭它,因为它会在您启动后立即关闭,除非您Sleep在其中添加命令,在这种情况下反而变得不可靠。

但是,您可以使用单独的键来停止循环,如下所示。

toggle := 0
i := 0
F1::
    toggle := !toggle
    if (toggle) {
        Loop {
            if (GetKeyState("F2", "P")) {
                toggle := !toggle
                break
            }

            TrayTip, Counter, %i%
            i++
        }   
    }
return
Run Code Online (Sandbox Code Playgroud)

但就像我上面说的,SetTimer以更稳定的方式实现相同的结果。所以我会这样做。