【问题标题】:AutoHotKey keystroke break loopAutoHotKey 击键中断循环
【发布时间】:2013-04-18 16:55:50
【问题描述】:

使用 AutoHotKey,我有一个相当简单的循环脚本,我希望能够通过按键来中断。我尝试了一些来自网站的不同代码,但似乎不起作用。

代码如下:

#g::
Loop 20
{
    MouseClick, left,  142,  542
    Sleep, 1000
    MouseClick, left,  138,  567
    Sleep, 1500
    MouseClick, left,  97,  538 
    Sleep, 1000
}

【问题讨论】:

    标签: loops autohotkey break


    【解决方案1】:

    使用全局变量 (keepCycling) 并切换它以中断循环。全局变量应该在脚本的开头声明。

    【讨论】:

      【解决方案2】:

      切换全局变量是要走的路。您需要在脚本的开头声明它。

      global keep_working = 1 ;在脚本的开头将 break 设置为 off

      b:: ;设置休息 保持工作 = 0 返回

      g:: ;设置工作并开始循环 保持工作 = 1
      环形, ;循环直到 b 被按下(是循环,原始代码中的 20) { 鼠标单击,向左,142、542 睡觉,1000 鼠标单击,向左,138、567 睡觉,1500 鼠标左键 97, 538 睡觉,1000 如果(保持工作= 0) { 返回 ;需要停止执行 } } 返回 ;在热键过程结束时需要此分隔符。

      【讨论】:

        【解决方案3】:
        #g::  
        Loop 20  
        {  
            KeyWait,Ctrl,D T0  
                if Errorlevel = 0  
                    break  
            MouseClick, left,  142,  542  
            KeyWait,Ctrl,D T0  
                if Errorlevel = 0  
                    break  
            Sleep, 1000  
            KeyWait,Ctrl,D T0  
                if Errorlevel = 0  
                    break  
            MouseClick, left,  138,  567  
            KeyWait,Ctrl,D T0  
                if Errorlevel = 0  
                    break  
            Sleep, 1500  
            KeyWait,Ctrl,D T0  
                if Errorlevel = 0  
                    break  
            MouseClick, left,  97,  538  
            KeyWait,Ctrl,D T0  
                if Errorlevel = 0  
                    break  
            Sleep, 1000  
        }  
        
        return
        

        使用上述方法可能会有所帮助,因为效果是即时的。通常情况下,当您按住 Ctrl 一段时间时,您的循环会停止。

        【讨论】:

        • 你的代码有缺陷。如果在执行 sleep 时开始按住 ctrl,则必须按住 ctrl 整个睡眠时间。所以效果远非立竿见影。您还重复了六次相同的命令,您不应该重复自己(如果 OP 想要更改热键,祝您好运 6 次以上)。而且您不知道整个循环是否是不应中断的单个命令;使用我的方法,您仍然可以随时放置 if 语句(如果需要,这取决于用户)并实现循环终止。
        • @armin ,我知道睡眠事实。(所以我经常使用“经常”)而且我的回答主要是针对特定问题的,而不是针对一般情况。 (由于 dave 的脚本很小,我可以重复 6 次)。并且没有必要将 break_g 设为 "global" 。我看到你从我的代码中编辑了这一点。
        【解决方案4】:

        添加全局变量可能是您的情况最简单的解决方案,因为您的循环需要一段时间才能完成。

        global break_g = 0 
        
        #b::
            break_g = 1 
        return
        
        
        #g::
        break_g = 0
        Loop 20
        {
            MouseClick, left,  142,  542
            Sleep, 1000
            MouseClick, left,  138,  567
            Sleep, 1500
            MouseClick, left,  97,  538 
            Sleep, 1000
            if( break_g = 1)
            {
                return
            }
        }
        return ; also you were missing this return 
        

        【讨论】:

        • 这确实有效。谢谢。瞬间停止是最好的,但我对此很满意。
        • @Dave 在每次 MouseClick 之前添加一个 if 语句。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多