【问题标题】:Making two AutoHotkey key remapping scripts work together correctly使两个 AutoHotkey 键重新映射脚本一起正常工作
【发布时间】:2022-01-07 01:34:39
【问题描述】:

我有两个 AutoHotkey 脚本,可以使用笔记本电脑键盘两侧的 Ctrl 键:

  1. Caps Lock 映射到(左)Ctrl

    SetCapsLockState, Off
    CapsLock::LCtrl
    
  2. 按下时将Enter映射到(右)Ctrl;否则(如果没有超时)发送 Enter:

    Enter::RCtrl
    ~Enter Up::Send % "{RCtrl up}" (A_PriorKey = "Enter" ? "{Enter}" : "")
    

这两个脚本完美运行,几乎没有边缘情况。

但是,我无法触发 Ctrl + Enter,这是我通常用来在文本编辑器中打开新行的快捷方式。按下 Caps Lock 并点击 Enter,没有任何反应。即使我按下(左)Ctrl(真正的键)并按Enter,也没有任何反应。

我应该怎么做才能使两个脚本一起工作以启用 Ctrl + Enter

【问题讨论】:

    标签: autohotkey


    【解决方案1】:

    我设法分两步解决了这个问题:

    1. 将 CapsLock 本地映射到 Control。 AutoHotkey 认为我的 CapsLock 键确实是 Control 键,这使我免于处理 AutoHotkey 中奇怪的 CapsLock 开/关边缘情况。

    2. 使用以下脚本将Enter映射为双功能RCtrl/Enter:

    LShift & Enter Up::
      GetKeyState, state, Shift
      if (A_PriorKey = "Enter" and state = "D") {
        Send +{Enter}
      }
      Send {LCtrl Up}{RCtrl Up}
      Return
    LCtrl & Enter Up::
      GetKeyState, state, Control
      if (A_PriorKey = "Enter" and state = "D") {
        Send ^{Enter}
      }
      Send {LCtrl Up}{RCtrl Up}
      Return
    LAlt & Enter Up::
      GetKeyState, state, Alt
      if (A_PriorKey = "Enter" and state = "D") {
        Send !{Enter}
      }
      Send {LCtrl Up}{RCtrl Up}
      Send {LAlt Up}{RAlt Up}
      Return
    Enter::RCtrl
    ~Enter Up::
      Send % "{RCtrl up}" ((A_PriorKey = "Enter") ? "{Enter}" : "")
    

    这非常令人兴奋,因为它运行良好! CapsLock 和 Enter 作为对称控制键之间的修饰符舞蹈非常完美,我可以在两侧无缝切换,而不会出现令人讨厌的边缘情况、意外的修饰符按下、释放或 {Enter} 按下。声明的顺序对于它的工作非常重要;边缘情况必须先出现。

    但是,如您所见,需要显式处理 Alt + EnterCtrl + EnterShift + Enter。如果我需要 Ctrl + Alt + Enter,我也需要处理它。

    我想知道是否有更好的方法来完成这项工作,而无需定义这些额外的映射。

    【讨论】:

      【解决方案2】:

      我在 Libreoffice Writter 上试过,CTRL+ENTER 转到下一页.. 上面的代码运行良好。 刚刚在 Enter::RCtrl 之前添加了 ~ 以不阻止来自 Enter 键的本机功能。

      SetCapsLockState, Off
      CapsLock::LCtrl
      ~Enter::RCtrl
      ~Enter Up:: Send % "{RCtrl up}" (A_PriorKey = "Enter" ? "{Enter}" : "")
      

      附注: 而且我认为您可以只使用一个脚本和两个指令,而不是为每个指令使用一个脚本..

      【讨论】:

      • 非常感谢 Dieisson,但这不起作用。按住 Enter 发送{Enter},然后激活{Ctrl} 修饰符。这不是我想要的。要激活 {Enter},我需要快速按下并释放 Enter 键,我的原始脚本处理得很好。
      猜你喜欢
      • 2011-12-11
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      相关资源
      最近更新 更多