带鼠标轮键重新映射的AHK问题

时间:2015-02-28 19:17:18

标签: autohotkey

我的脚本出现问题,我不明白为什么它不按照我想要的方式工作。

我想要的是:当我使用鼠标滚轮时,我希望它使用我的保健瓶,或者将键盘“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行,它就可以在应用程序之外工作。

任何帮助都将不胜感激。

2 个答案:

答案 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 xxxSend {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但从不释放它。