我有一个写为 的组合键~XButton1 & XButton2::
。当我按下该组合键时,事件XButton1
不会被过滤掉。例如,这可能会导致我的浏览器在我不想的情况下返回上一页。
根据文档,删除~
将导致密钥不会传递到系统的其余部分。但是,当我这样做时,XButton1
无论我是否完成组合,都不会传递给系统。
这是我希望看到的行为:
XButton1
AHk 应该在收到第一个事件时对其进行缓冲。如果我做按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