如何调整 AutoHotkey 的鼠标事件过滤?

如何调整 AutoHotkey 的鼠标事件过滤?

我有一个写为 的组合键~XButton1 & XButton2::。当我按下该组合键时,事件XButton1不会被过滤掉。例如,这可能会导致我的浏览器在我不想的情况下返回上一页。

根据文档,删除~将导致密钥不会传递到系统的其余部分。但是,当我这样做时,XButton1无论我是否完成组合,都不会传递给系统。

这是我希望看到的行为:

XButton1AHk 应该在收到第一个事件时对其进行缓冲。如果我XButton2,不会向系统传递任何内容。但是,如果我按下XButton2,发送快速XButton1向下和向上。

有什么方法可以获得这种行为吗?

答案1

正如 AutoHotkey 中所述关于 & 的文档,使用该a & b模式会导致a按键失去其原始功能。要使按键a在单独使用时释放时起作用,您可以创建一个映射回自身的热键,例如a::Send {a}

对于你的情况,你可以尝试类似

XButton1 & XButton2:: 任何你想要的
XButton1::Send {XButton1}

答案2

你应该尝试使用 KeyWait 函数以及 A_PriorHotKey 和 A_TimeSincePriorHotkey 变量,如示例 #4 中所述KeyWait 文档

; Example #4: Detects when a key has been double-pressed (similar to double-click).
; KeyWait is used to stop the keyboard's auto-repeat feature from creating an unwanted
; double-press when you hold down the RControl key to modify another key.  It does this by
; keeping the hotkey's thread running, which blocks the auto-repeats by relying upon
; #MaxThreadsPerHotkey being at its default setting of 1.
; Note: There is a more elaborate script to distinguish between single, double, and
; triple-presses at the bottom of the SetTimer page.

~RControl::
if (A_PriorHotkey <> "~RControl" or A_TimeSincePriorHotkey > 400)
{
    ; Too much time between presses, so this isn't a double-press.
    KeyWait, RControl
    return
}
MsgBox You double-pressed the right control key.
return

相关内容