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

时间:2014-10-07 03:32:07

标签: loops toggle autohotkey

所以我刚刚开始使用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

6 个答案:

答案 0 :(得分:3)

我认为你最好使用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

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

您可以使用GetKeyState()执行此操作,但之后您无法使用相同的键来打开和关闭它,因为它会在您启动时立即关闭,除非您添加{{1在那里的命令,在这种情况下,它变得不可靠。

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

Sleep

但正如我上面所述,toggle := 0 i := 0 F1:: toggle := !toggle if (toggle) { Loop { if (GetKeyState("F2", "P")) { toggle := !toggle break } TrayTip, Counter, %i% i++ } } return 以更加稳定的方式实现了相同的结果。所以我会选择那个。

答案 1 :(得分:1)

这是我能够做到的最简单的方法。

使用键" 2"开始/停止切换,发送" a"延迟0.1秒。

#MaxThreadsPerHotkey 2

running := false
stop := false

~2::

if(!running) {
    running := true
}
else {
    stop := true
    return
}

loop {

    Send {a} ; example sending key "a"

    if(stop) {
        running := false
        stop := false
        break
    }

    Sleep, 100

}

return

答案 2 :(得分:0)

使用MaxThreadsPerHotkey

#MaxThreadsPerHotkey 2
wintitle=Path of Exile
SetTitleMatchMode,2
DetectHiddenWindows,On
setkeydelay,2500,0
return

f1::
toggle:=!toggle
Loop
{
if toggle
controlsend,,{enter}{up}{enter}, %wintitle%
else
break
}
return

答案 3 :(得分:0)

此代码可以满足您的需求:

#MaxThreads 2
wintitle=Path of Exile
SetTitleMatchMode,2
DetectHiddenWindows,On
setkeydelay,2500,0

return
F1::
    Loop
    {

        CheckLButton1:
       if (GetKeyState("F1"))
        {
            Goto, CheckLButton1
        }

        Docode:
        controlsend,,{enter}{up}{enter}, %wintitle%
        ;ToolTip, 1


        if (!(GetKeyState("F1")))
        {
            Goto, Docode
        }

        CheckLButton2:
       if (!(GetKeyState("F1")))
        {
            return
        }
        else
        {
            Goto, CheckLButton2
        }
    }
return

如果您需要解释,请查看我的帖子:http://ahkscript.org/boards/viewtopic.php?f=5&t=4613#p26298

此外,始终使用来自http://ahkscript.org/的AutoHotkey及其文档(当前最新版本,新官方网站)! Autohotkey.com上的AutoHotkey及其文档已过时,使用它们可能会遇到一些问题!

答案 4 :(得分:0)

我的策略是这样的, 使用此命令:

 v::
loop
{
click
if (GetKeyState("b")) {
break
    }
}
return

(简单的AutoClicker)

答案 5 :(得分:0)

使用循环命令的工作示例。然而这么简单。

#Persistent
#MaxThreadsPerHotkey 2
toggle := False

f1 UP::
toggle := !toggle

Loop {
    If (!toggle) {
        break
    }
    ; Spam commands here
}
Return