【问题标题】:In AutoHotKey, how do I block LButton from being sent if it's used in the hotkey context but not if it's used elsewhere?在 AutoHotKey 中,如果 LButton 在热键上下文中使用,但如果在其他地方使用,我如何阻止发送?
【发布时间】:2020-10-08 22:15:36
【问题描述】:

我有这个脚本:

~LButton & RButton::
    Click Middle
Return

假设当我同时按下LButtonRButton 时,它们将作为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

【问题讨论】:

  • 逻辑上不可能让 L&R 按钮在不激活 L 或 R 按钮的情况下激活 M 按钮,同时保留 L 按钮的功能。

标签: autohotkey


【解决方案1】:

好的,我以最复杂的方式解决了它。如果您对此有更简洁的方法,请务必将其提供给我,因为我对此感到不舒服,但它确实有效。

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

【讨论】:

  • 这会将 LButton 向下发送并一直按住它。不过,它似乎可以在某些应用程序中使用。
【解决方案2】:

有人偶然发现,请先阅读。

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

简洁的答案

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 2020-03-03
    • 2012-05-12
    • 2018-03-18
    • 2020-01-19
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多