Windows 自动热键:用另一个热键切换RAlt到鼠标热键

Windows 自动热键:用另一个热键切换RAlt到鼠标热键,windows,autohotkey,keymapping,Windows,Autohotkey,Keymapping,我正在尝试创建一个热键(Win+Shift+Q),它可以打开/关闭另一个热键,将右Alt键更改为鼠标左键单击;然而,我不能让它工作 预期行为: 按Windows+Shift+Q将首先切换右Alt键以用作鼠标左键单击 再次按Windows+Shift+Q将右Alt键切换回充当右Alt键 再次按Windows+Shift+Q将恢复为左键单击行为(请参见#1)。等等 下面是我的代码的最新迭代: Hotkey, RAlt, MyClick, On #+Q:: ;Win+Shift+Q :: ::Ri

我正在尝试创建一个热键(Win+Shift+Q),它可以打开/关闭另一个热键,将右Alt键更改为鼠标左键单击;然而,我不能让它工作

预期行为:

  • 按Windows+Shift+Q将首先切换右Alt键以用作鼠标左键单击
  • 再次按Windows+Shift+Q将右Alt键切换回充当右Alt键
  • 再次按Windows+Shift+Q将恢复为左键单击行为(请参见#1)。等等
  • 下面是我的代码的最新迭代:

    Hotkey, RAlt, MyClick, On
    #+Q::   ;Win+Shift+Q :: ::Right-Alt acts as a left mouse button click
        switch := !switch
        MsgBox %switch%
        Hotkey RAlt, % (switch ? "Off": "On")
        Return
    
    MyClick:
        MouseClick
    Return
    
    当我运行脚本时,单击MsgBox上的“确定”并退出脚本后,出现以下错误:

    Error: Nonexistent hotkey
    
    Specifically: RAlt
    
        Line#
        141: Hotkey,RAlt,MyClick,On
        143: switch:=!switch
        144: MsgBox %switch%
     -->145: Hotkey RAlt, % (switch ? "Off": "On")
        146: Return
        149: MouseClick
        150: Return
    
     The current thread will exit.
    
    大多数其他可能与(,)相关的帖子只处理键到键的映射,而不是键到鼠标的映射。我不知道这是否是我的问题的原因

    以前我有这个,但是Win+Shift+Q没有切换行为,RAlt总是充当左键单击,所以我将其注释掉:

    #+Q::   ;Win+Shift+Q :: ::Right-Alt acts as a left mouse button click
        RAlt::LButton
        ;Hotkey, RAlt, Toggle ;Does not work for some reason
    
        int += 1
        test := mod(int, 2) = 0
        if (test) {
            msgbox on
            Hotkey, RAlt, On
        }
        else {
            msgbox off
            Hotkey, leftClick, Off
        }
    Return
    

    我还想补充一点,我希望这种行为能够跨窗口进行,而不仅仅是单个应用程序(这似乎也是其他帖子中的一个主题,允许使用35; IfWinActive类型建议/解决方案).

    我在AutoHotkey v1.1.13.01 Unicode 32位中尝试了您当前的代码迭代,按消息框上的
    OK
    后,我没有发现任何错误,脚本按广告的方式工作


    尝试在此处更新您的自动热键版本:并查看问题是否仍然存在。

    不确定我的旧版本为何无法工作。我还必须将我的初始热键(热键、RAlt、MyClick、On)移动到文件的顶部,否则我会不断收到错误(我不知道,这可能在旧版本中也修复了它)。
    bState:=False
    
    #If bState
       RAlt::Click
    #If
    
    #+vk51:: ; win + shift + q
       KeyWait, vk51
       TrayTip, % "state of switch", % (bState:=!bState) ? "on":"off"
       Return