【问题标题】:autohotkey: Cancel RButton user input after LButton pressedautohotkey:按下 LButton 后取消 RButton 用户输入
【发布时间】:2021-01-10 02:42:09
【问题描述】:

在 fps 中,我正在尝试设置一个热键,这样当我按住 L 按钮(左鼠标)时,枪的主要开火,然后点击 RButton,LButton 停止,RButton 开始。没有脚本的游戏,对于其他武器,我会自动得到想要的结果。那就是:我正在按住 LButton,但如果我在“之后”还按住 RButton,LButton 就会停止,而 RButton 的连发会发挥作用。但是,在完成上述操作后,没有脚本的不同范围武器会冻结。

所以我希望,一旦按下 RButton,就停止 LButton 的所有用户输入,直到 RButton 的热键完成。

~RButton
    ;Blockinput Mouse ;Send/Sendmouse
        Send, {Click Left}{Click Right}{Click Left}
    ;BlockInput off
        return

您可以将 Rbutton 脚本视为瞄准步枪。单击左激活范围,单击右激活它。目前,仅当我将手从 LButton 完全移开然后按 RButton 时,所需的行为才有效....我也能够让 ~LButton & ~RButton:: 工作,但这仅涵盖它们都第一次按下时的情况同时,我想介绍在 RButton 之前按下并按住 LButton 的实例。

我尝试过应用块输入,如上所示,使用 UAC 变通方法使其工作,阻止某些事情,但当它像 lbutton 一样被触发时似乎不会阻止任何持有的键,除非我错过了一些东西。如果有一个“在 RButton 触发后立即冻结 LButton 的用户输入,直到 RButton 的脚本完成”,这将解决我认为的问题。我尝试添加睡眠延迟,但它们似乎没有帮助。问题似乎是 LButton 在按住时会在 RButton 首次激活时继续触发。

我在按住 LButton 的同时使用了以下内容,并且声音确实触发了,所以这必须可以编写脚本。

*RButton::
Soundbeep
return

编辑:

;此处的代码有效,但仅在 100 次睡眠时,我必须在按下 rbutton 后 100 毫秒内将手从按下 lbutton 中移开。

*RButton::

GetKeyState, state, lbutton, p
if (state = "D")
{
soundbeep
send {Click Left Up}
sleep 100
;i need to actually disable the previous keypresses from it
}
    
    Send, {Click Right}{Click Left}{Click Right}
return   

【问题讨论】:

    标签: scripting autohotkey


    【解决方案1】:

    根据我从您的问题中了解到的情况,如果按住鼠标左键,您实际上并不需要像发送 Left MouseUp 命令那样阻止用户鼠标输入。我很难理解您要寻找的最终目标是什么,但我是根据我能够理解的内容写的:

    #SingleInstance Force
    
    *RButton::
    Soundbeep
    If (getKeyState( "lbutton", "p" )){
       Click, Left, Up
       Send, {Click Left}{Click Right}{Click Left}
    } else {
       Send, {Click Left}{Click Right}{Click Left}
    }
    return
    
    
    esc::ExitApp
    

    更新:

    根据问题 cmets 的澄清,这应该可行。了解功能:如果在按住鼠标左键的同时单击鼠标右键,则释放 LMB,但不要抑制 RMB 输入。

    *~RButton::
    If (getKeyState( "lbutton", "p" ))
       Click, Left, Up
    return
    

    更新 2: 现在在按下 RMB 之前释放 LMB。我有一种感觉,无论您正在玩什么游戏,都无法检测到键状态之间的零滴答切换,因此我添加了一个睡眠功能,您可以根据需要对其进行微调/删除。

    *RButton::
    If (getKeyState( "lbutton", "p" )){
       Click, Left, Up
        Sleep 100
    }
    Click, Right, Down
    KeyWait RButton
    Click, Right, Up
    return
    

    【讨论】:

    • 这不行。问题是 LButton 必须在单击 rbutton 后“不久”被释放。所以我在上面发布的代码可以工作,但只有至少 100 个睡眠延迟,而且我必须从按下 lbutton 的过程中移开我的手。我需要的是在 rbutton 的热键运行时禁用我自己的任何物理 lbutton 点击​​。如果这没有意义:只知道我确实需要一种方法来物理停止来自 lbutton 的任何输入,我可能会在 rbutton 的热键运行时通过物理单击鼠标获得。按住 lbutton 不应该影响 rbuttons 热键
    • 能否请您透露我如何准确地复制您的问题,或者您希望发生的具体事件顺序是什么?目前,我可以真正测试我正在编写的任何代码是否有效的唯一方法是,如果我将它发送给您,看看它是否符合您的要求。如果你能透露这些信息,我可能会更好地理解和解决这个问题。
    • 在游戏中按住 {Click Left}。然后按住 {Click Right}。 {Click Right} 没有取消 {Click Left},事实上 {Click RIght} 甚至没有注册,只有 {Click Left} 正在注册。我需要 {Click Right} 是在这种情况下唯一注册的东西。文本编辑器中的键盘:说你按住 q 然后你同时按住 w 秒...发生了什么? qqqqqqqqqqqqqqqqqqqqwwwwwwwwwwwwwww。 w 覆盖来自 q 的任何输入。我想用鼠标实现这种行为。
    • 按住 q 和 w 的示例确实有助于澄清问题,我更新了帖子@kite。如果有效,请将其标记为已接受的答案。如果没有,请 lmk 告诉我我可以改进的地方。
    • 鼠标右键瞄准枪,左键开枪。左鼠标按住然后右鼠标也按住,导致枪停止射击的第三种行为(我们希望枪停止射击和范围)。不幸的是,所写的更新脚本没有改变默认行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2013-05-26
    • 2012-01-20
    相关资源
    最近更新 更多