在AutoHotKey中,如果LButton在热键上下文中使用时如何阻止它被发送,但如果在其他地方使用它则不会阻止它被发送?

我有这个脚本:

~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
点赞