Autohotkey 在自动热键中,如果LButton';在热键上下文中使用,但如果为';它在别处用过吗?

Autohotkey 在自动热键中,如果LButton';在热键上下文中使用,但如果为';它在别处用过吗?,autohotkey,Autohotkey,我有这个剧本: ~LButton & RButton:: Click Middle Return 假设当我同时按下LButton和RButton时,它们将充当MButton。这确实有效,但它也会发送LButton。如果我从热键前缀中删除~,LButton将完全停止工作 我尝试了各种方法,试图让它发挥作用 这不起作用: #If GetKeyState("LButton", "P") RButton:: Click Middle Return 这也不起作用: middle

我有这个剧本:

~LButton & RButton::
    Click Middle
Return
假设当我同时按下
LButton
RButton
时,它们将充当
MButton
。这确实有效,但它也会发送
LButton
。如果我从热键前缀中删除
~
LButton
将完全停止工作

我尝试了各种方法,试图让它发挥作用

这不起作用:

#If GetKeyState("LButton", "P")
RButton::
    Click Middle
Return
这也不起作用:

middleclicktrigger := False

LButton & RButton::
    middleclicktrigger := True
    Click Middle
    middleclicktrigger := False
Return

~LButton::
    If (middleclicktrigger) {
        BlockInput, Mouse
    }
Return
这应该是可行的,但我遇到了一个问题,在正常使用情况下,我无法按住并拖动
LButton
。使用简单的左键点击可以很好地工作,但我需要它在不与鼠标右键组合使用时作为普通的鼠标左键工作:

middleclicktrigger := False

LButton & RButton::
    middleclicktrigger := True
    Click Middle
    middleclicktrigger := False
Return

LButton::
    IF (!middleclicktrigger) {
        Click down
    }
Return

LButton up::
    IF (!middleclicktrigger) {
        Click up
    }
Return

好吧,我用最复杂的方法解决了。如果你有一个更干净的方法,请给我,因为我觉得不舒服,但它的工作,所以呵呵

middleclick := False
leftclick := False
rightclick := False

Loop {
    If (GetKeyState("LButton", "P") && GetKeyState("RButton", "P") && !middleclick) {
        middleclick := True
        BlockInput, Mouse
        Click Middle
        SetTimer, middleclickfalse, -1000
    } Else If (GetKeyState("LButton", "P") && !leftclick && !middleclick) {
        leftclick := True
        Click down
    } Else If (GetKeyState("RButton", "P") && !rightclick && !middleclick) {
        rightclick := True
        Click down right
    }

    Sleep, 10
}

middleclickfalse:
    middleclick := False
Return

LButton up::
    If (!middleclick) {
        If (leftclick) {
            Click up
            leftclick := False
        }
    }
Return

RButton up::
    If (!middleclick) {
        If (rightclick) {
            Click up right
            rightclick := False
        }
    }
Return

如果有人无意中发现了这一点,请先读一读

发布此问题的人很接近,但

简洁的回答

RButton::
if GetKeyState("LButton", "P")
Click Middle
else
Click r
Return

从逻辑上讲,在保持L按钮功能的同时,L&R按钮在不激活L或R按钮的情况下激活M按钮是不可能的。这会发送L按钮并保持按下。不过,它似乎在某些应用程序中起作用。