AHK 释放时中断循环并继续按键

Posted

技术标签:

【中文标题】AHK 释放时中断循环并继续按键【英文标题】:AHK Break Loop on Release and continue on keypress 【发布时间】:2014-01-05 14:56:56 【问题描述】:

我正在寻找调整附加脚本的建议。

当 xbutton2 被按下时,循环被执行并重复正常,但我很难像我想要的那样停止循环。

理想情况下,我希望在释放 xbutton2 时尽快停止循环。

如果在按住 xbutton2 的同时按下某个键(或指定范围的键),我还希望循环跳到开头。

xbutton2 down = 1-(400ms)-2-(400ms)-3-(400ms)-4-(750ms)-5-(500ms) - 等等

xbutton2 按下并在发送后释放 3 = 1-(400ms)-2-(400ms)-3 -xbutton2 释放

xbutton2 向下并在发送后按下 x 3= 1-(400ms)-2-(400ms)-3 -X- 1-(400ms)-2-(400ms) 等 p>

SetNumlockState, Alwayson
#MaxThreadsPerHotkey 3


$*XButton2::

loop
    
if not GetKeyState("XButton2", "P")
        break
Send Blind 1
sleep 400
 if (not GetKeyState("XButton2", "P")or GetKeyState("x", "P"))
        continue
Send Blind 2
sleep 400    
 if (not GetKeyState("XButton2", "P")or GetKeyState("x", "P"))
        continue
Send Blind 3 
sleep 400 
 if (not GetKeyState("XButton2", "P")or GetKeyState("x", "P"))
        continue
Send Blind 4
    sleep 750
 if (not GetKeyState("XButton2", "P")or GetKeyState("x", "P"))
        continue
Send Blind 5
sleep 500


return

【问题讨论】:

【参考方案1】:

您可以尝试从AHK forums 的这个示例开始:

list=a,b,c,enter,stringclick    ; the list of keys and combos. comma separated. 
stringsplit, list, list,`,
Counter = 0

$F8::
    While GetKeyState("F8","P")
        Counter := (Counter=list0) ? (1) : (Counter+1)
        Send % list%counter%
        Sleep 50
    
return

您可以使用附加热键将计数器重置为“0”。我认为以下内容可能对您有用:

list=Blind1,Blind2,Blind3,Blind4,Blind5
stringsplit, list, list,`,
Counter = 0

$*XButton2::
    While GetKeyState("XButton2","P")
        Counter := (Counter=list0) ? (1) : (Counter+1)
        Send % list%counter%
        Sleep 400
    
return

x::Counter = 0

【讨论】:

感谢您的意见,我喜欢这个主意。处理可变睡眠定时器的最佳方法是什么,因为发送命令之间的时间不同。 为什么不遵循同样的模式呢? otherlist=400,200,730,10 然后是 stringsplit, otherlist, otherlist,`,Sleep otherlist%counter%?

以上是关于AHK 释放时中断循环并继续按键的主要内容,如果未能解决你的问题,请参考以下文章

ACF 页面 while 循环在循环时中断页脚

在另一个应用程序中模拟按键和按键释放?

保持声音样本播放直到按钮被释放android

求AHK(AutoHotKey)写个超简单脚本

Vue切换页面时中断axios请求

java是不是可设这样的断点,当变量值变化时中断?