我的脚本出现问题,我不明白为什么它不按照我想要的方式工作。
我想要的是:当我使用鼠标滚轮时,我希望它使用我的保健瓶,或者将键盘“1键”发送一次,当我使用鼠标滚轮时,我希望它使用我的健康瓶(发送键盘'键5'一次),但是发生了什么,是不是重复了,所以不是使用烧瓶一次,而是使用整个烧瓶,或者更确切地说它击中键盘键1或5几次,它自动重复
我的问题是:如何阻止它重复发送命令,因为在应用程序中,如果我按住1或5它不会自动重复,我必须再次单击它。所以send命令是自动重复的,我不希望它。
我想也许是因为当我向下或向上做鼠标滚轮时它已多次执行,但是当我在鼠标控制面板的窗口中将其设置为1时,它没有帮助。
这是我的剧本,我觉得很简单......
#IfWinActive Path of Exile
WheelUp::Send {1}
WheelDown::Send {5}
在我尝试使用send命令之前,我尝试使用此脚本执行此操作:
#IfWinActive Path of Exile
WheelUp::1
WheelDown::5
这个脚本根本不适用于应用程序......但是如果我不使用#IfWinActive
行,它就可以在应用程序之外工作。
任何帮助都将不胜感激。
答案 0 :(得分:0)
假设您的鼠标多次触发热键,您可以尝试以下(未测试):
hotkey, ifWinActive, Path of Exile
hotkey, WheelUp, send1, on
hotkey, WheelDown, send5, on
hotkey, ifWinActive
return
send1:
send 1
hotkey, WheelUp, send1, off ; prevents WheelUp to send 1 more than one time for 1000 ms
sleep, 1000
hotkey, ifWinActive, Path of Exile
hotkey, WheelUp, send1, on
hotkey, ifWinActive
return
send5:
send 5
hotkey, WheelDown, send5, off ; prevents WheelDown to send 5 more than one time for 1000 ms
sleep, 1000
hotkey, ifWinActive, Path of Exile
hotkey, WheelDown, send5, on
hotkey, ifWinActive
return
答案 1 :(得分:0)
对于鼠标滚轮的每个凹槽,您的第一个脚本(下方)只发送一个按键事件,然后立即发送一个按键事件。除非鼠标滚轮仍在移动(如鼠标所示),否则不会重复击键。发送命令执行不自动重复。
#IfWinActive Path of Exile
WheelUp::Send {1}
WheelDown::Send {5}
对于游戏而言,与其他应用程序无法可靠地响应,因此常见问题Why do Hotstrings, Send, and Click have no effect in certain games?提供了一些可能的解决方案。例如,我建议使用SetKeyDelay的 PressDuration 参数来增加“按下”和“释放”键之间的延迟。或者,您可以使用Send {1 down}
,Sleep xxx
和Send {1 up}
。
您可能希望在每次发送的前面添加{Blind}
,例如Send {Blind}1
,否则可能会干扰您使用修饰键。例如,如果您按住Ctrl键,Send 1
将自动“释放”Ctrl,发送1,然后“按”Ctrl键退回。
如果您的鼠标导致热键多次触发,Blauhirn的答案可能有效,但可以简化(如上所述添加):
SetKeyDelay 20, 20
#IfWinActive Path of Exile
WheelUp::
Send {Blind}{1}
Sleep 500 ; Wait 500ms
return ; WheelUp can't fire a second instance until the first returns.
WheelDown::
Send {Blind}{5}
Sleep 500
return
这种简单方法的缺点是,如果在第一次睡眠返回之前激活一个热键,然后激活另一个热键(即本例中的500ms内),则两者都将被阻塞,直到第二次睡眠结束。减少睡眠时间有助于避免这种情况。
您的第二个脚本无效。即WheelUp::1
无效,documented:
内置重映射方法不支持以下键:
- 鼠标滚轮(WheelUp / Down / Left / Right)。
原因在于,与其他键不同,WheelUp / Down“伪键”只能按,而不能释放。因此,当您重新映射WheelUp::1
时,它会将WheelUp映射到{1 down}
,并且永远不会发送{1 up}
;也就是说,它按1但从不释放它。