无法使用组合键模拟鼠标按钮

Unable to emulate mouse buttons with combination keys

我想为鼠标按钮分配一些组合键。

我打算使用'vk1Dsc07B'作为虚拟前缀键, 我将使用 'v' 作为 LButton,'c' 作为 MButton,'x' 作为 RButton。

我尝试了几种方法,但都失败了。我可以单击,但是,我无法正确拖动。 一旦我尝试拖动一个对象,指针就会每 0.1 秒抓取并释放一次。 问题是,我猜,关键事件是重复发送的,不像鼠标按钮。

我正在寻找如下代码:

  1. 在我按下组合键时,持续按下鼠标按钮,不要重复按下
  2. 当我释放组合键中除虚拟前缀键之外的一个键时,将鼠标按钮向上更改

这是我的代码之一:

vk1Dsc07B::Return ; deactivate 'Muhenkan' key in order to use it just as a prefix key
vk1Dsc07B & v::Click,L,D Return
vk1Dsc07B & c::Click,M,D Return
vk1Dsc07B & x::Click,R,D Return
vk1Dsc07B & v Up::Click,L,U Return
vk1Dsc07B & c Up::Click,M,U Return
vk1Dsc07B & x Up::Click,R,U Return

另一个样本:

vk1Dsc07B::Return ; deactivate 'Muhenkan' key in order to use it just as a prefix key
vk1Dsc07B & v::Send {Blind}{LButton down}
vk1Dsc07B & c::Send {Blind}{MButton down}
vk1Dsc07B & x::Send {Blind}{RButton down}
vk1Dsc07B & v Up::Send {Blind}{LButton up}
vk1Dsc07B & c Up::Send {Blind}{MButton up}
vk1Dsc07B & x Up::Send {Blind}{RButton up}

可能大部分人都没有'vk1Dsc07B'密钥,请更换某个密钥。

很高兴听到任何想法:)

此致,

您要实现的是重新映射 两个键一个。 AutoHotkey 文档说:

Although a pair of keys cannot be directly remapped to single key (e.g. it's invalid to write a & c::b), this effect can be achieved by explicitly adding the up and down hotkeys [link]

因此,您的第二个解决方案应该确实有效:

vk1Dsc07B::return    ; you don't need this line. vk1Dsc07B is deactiated by default because of the other hotkeys
vk1Dsc07B & v::Send {Blind}{LButton down}
vk1Dsc07B & v Up::Send {Blind}{LButton up}
; and you need the `{Blind}` keyword here, do you??

,但事实并非如此。这仅适用于 'normal' 键,如 send {a down}。问题是当你按住vk1Dsc07B & v时,{LButton down}会重复发送。这导致 "the pointer grab and release it every 0.1 seconds"。 因此,我们必须寻找另一种方式,尝试在触发热键时仅发送一次 {LButton down}

我提出了以下将热键触发器存储在变量中的解决方案:

Ltriggered := false
Mtriggered := false
Rtriggered := false

vk1Dsc07B  & v::
if(!Ltriggered) {
    Send {LButton down}
    Ltriggered := true
}
return
vk1Dsc07B  & v Up::
Send {LButton up}
Ltriggered := false
return

vk1Dsc07B  & c::
if(!Mtriggered) {
    Send {MButton down}
    Mtriggered := true
}
return
vk1Dsc07B  & c Up::
Send {MButton up}
Mtriggered := false
return

vk1Dsc07B  & x::
if(!Rtriggered) {
    Send {RButton down}
    Rtriggered := true
}
return
vk1Dsc07B  & x Up::
Send {RButton up}
Rtriggered := false
return