如果在autohotkey中给出相同的输入,如何重复执行中的脚本

时间:2019-08-18 20:32:15

标签: autohotkey

我使用此代码通过一个凹口发送更多的鼠标滚轮滚动,问题是在循环结束之前再次发送输入时,没有考虑到该问题,并且循环需要在重新启动之前结束

我试图寻找一种方法,在有输入的情况下破坏代码并重新启动,但没有成功

WheelUp::
loop 100
{
sendInput {WheelUp}
sleep 2
}
return

预期的行为:在第50个循环上,如果再次输入,请重置循环计数(停止并重新启动脚本),以便总重复次数为150

2 个答案:

答案 0 :(得分:1)

尝试这种方法。
您必须更改#MaxThreadsPerHotkey设置。

  

此设置用于控制给定热键有多少个“实例”   或hotstring子例程允许同时存在。对于   例如,如果热键的最大值为1,并且在热键被再次按下时   子例程已经在运行,则将忽略按。

这将允许热键自己“中断”。 每次在热键已处于活动状态时向上滚动,它将向循环添加100次滚动。

#MaxThreadsPerHotkey 2
WheelUp::

if (counter > 0)  ; this means the hotkey is already active
{
    counter := counter + 100  ; in that case we just add another 100 scrolls to the loop
    return
}
else ; this means the hotkey is not active, we start fresh with 100 scrolls
{   
    counter := 100
}   

while, counter > 0
{
    sendinput, {WheelUp}
    sleep 40  ; change this to your requirement
    counter--
    ; tooltip, % counter   ; un-comment this line for testing

}

return

~WheelDown::counter := 0 ; extra hotkey to stop the loop immediately if needed

答案 1 :(得分:0)

我无法回复其他评论,但是WheelUp::Send, {WheelUp 100}不会破坏当前的100个Wheelups,而会添加另外100个Wheelups。因此,如果在第50个WheelUp上再次输入,它将仍然发送200次WheelUp。

在循环中,您将需要一个条件语句来检测是否最近检测到物理上滚,然后重新启动循环。对于大多数键,您可以使用GetKeyState作为if语句中的检查项,但是鼠标滚轮没有要检测的状态。

在我的示例代码中,Enter按钮将重新启动循环。我不确定如果再次尝试使用WheelUp时如何重新启动循环,因为没有可检测的状态,并且A_TimeSincePriorHotkey不可靠,因为循环正在发送WheelUps。

WheelUp::
loop 100
{
    sendInput {WheelUp}
    sleep 2
    if (GetKeyState("Enter", "P"))
       Goto WheelUp
}
return