如何使用热键中断循环

时间:2013-11-23 04:39:34

标签: loops autohotkey

这应该很容易! I've checked out this thread,但它无济于事。

我似乎无法使用热键突破循环。我们的想法是您可以使用一个热键来启动和停止循环过程。

似乎timeron的价值一旦开始就永远不会进入循环。

以下是一个示例脚本:

#singleinstance force

timeron = 0
return

!f7::
    if(timeron){
        timeron = 0
        msgbox Okay, the loop is off.
    }else{
        timeron = 1 ;if this is not set to one, the loop will not begin
        msgbox Turning on the loop.
        gosub, STARTLOOPING
    }
RETURN


STARTLOOPING:
    ;do this over and over
    loop{
        if(!timeron)
            break   
        ;now wait for the right length of time before continuing the loop
        msgbox, The loop yet continues....
        Sleep, 5000
        if(!timeron)
            break
    }
RETURN

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

由于你的!F7永远不会结束,再次按下!F7会被忽略。 默认情况下,每次允许的每个热键只有一个线程。

添加

#MaxThreadsPerHotkey 2

作为脚本的第二行,然后第二行!F7按下可以停用循环。

答案 1 :(得分:2)

为什么不使用计时器呢?它们允许您的脚本在定时器运行之间执行其他操作,从而允许热键中断它们:

timeron := false
Exit
!F7::
    if(timeron) {
        timeron := false
        SetTimer, MyTimer, Off
    } else {
        timeron := true
        ; Call GoSub once if you want the subroutine
        ; to fire immediately at the beginning
        GoSub, MyTimer
        ; Then let the timer repeat it
        SetTimer, MyTimer, 5000
    }
return

MyTimer:
    Msgbox, Looping like crazy!
return

您始终可以使用计时器替换循环的功能。如果你有某种for循环/计数器,你可以使用全局变量。