【问题标题】:Unable to emulate mouse buttons with combination keys无法使用组合键模拟鼠标按钮
【发布时间】:2015-04-29 21:54:46
【问题描述】:

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

我将使用 '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


    【解决方案1】:

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

    虽然一对键不能直接重映射为单个键(例如写a&c::b无效),但是可以通过显式添加上下热键[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??
    

    ,但事实并非如此。这仅适用于像send {a down} 这样的“普通”键。问题是当你按住vk1Dsc07B & v时,{LButton down}会被重复发送。这导致“指针每 0.1 秒抓取并释放一次”。 因此,我们将不得不寻找另一种方法,尝试让{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
    

    【讨论】:

    • 非常感谢!它工作正常。 > 你不需要这条线。 vk1Dsc07B 在默认情况下因为其他热键而被停用 我误解了它:) 我会了解更多!真诚的,
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2010-12-16
    相关资源
    最近更新 更多