我使用此代码通过一个凹口发送更多的鼠标滚轮滚动,问题是在循环结束之前再次发送输入时,没有考虑到该问题,并且循环需要在重新启动之前结束
我试图寻找一种方法,在有输入的情况下破坏代码并重新启动,但没有成功
WheelUp::
loop 100
{
sendInput {WheelUp}
sleep 2
}
return
预期的行为:在第50个循环上,如果再次输入,请重置循环计数(停止并重新启动脚本),以便总重复次数为150
答案 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