使用 AutoHotKey 在最后活动的两个程序之间来回切换?

使用 AutoHotKey 在最后活动的两个程序之间来回切换?

我试图通过单击ALT在程序之间来回切换,但不干扰或破坏按住键的本机功能,但是A_PriorKey[下面]似乎只考虑键盘键而不是鼠标按钮或点击。

我怎样才能让鼠标键也得到考虑?

  • ALT目标是仅在按住 时没有按下其他键的情况下在最后活动的两个程序之间来回切换:
    ~$LAlt Up::
    {
      ToolTip, % A_PriorKey 
      if (A_PriorKey = "LAlt")
      {
        send, !{Tab}
      }
      Return
    }
    

答案1

您可以通过在每个组合的热键中设置一个标志来明确排除这些组合。

您的示例对我来说不起作用,因此第一个选项是使用除 之外的键ALT

选项 1. 使用另一个密钥

这里我使用L SHIFT

sendmode input

discard := 0

<+lbutton::
  discard := 1
  send +{lbutton}
return

<+rbutton::
  discard := 1
  send +{rbutton}
return

~lshift up::
  tooltip %a_priorkey% -- %discard%
  if (a_priorkey = "LShift" && discard = 0) {
    send !{tab}
  }
  discard:= 0
return

选项 2. 使用 LAlt(带一些技巧)

仍然可以使用 来实现L ALT,但更复杂,需要一些技巧来阻止 Windows 的硬编码Alt up菜单调用。结合上述方法:

discard := 0

<!lbutton::
    discard := 1
    send !{lbutton}
return

<!rbutton::
    discard := 1
    send !{rbutton}
return

LAlt::
    send {LAlt down}
return

~LAlt up::
    if (a_priorkey = "LAlt" && discard = 0) {
        send !{tab}
    }
    send {LAlt up}
    discard := 0
return

答案2

如果您不尝试并担心检测其他按键,而只是使用计时器值来确保您ALT在相当短的时间内按下开/关,它就可以起作用。

  • 您尝试执行的操作的一个缺点是,如果您激活一个文件,菜单显示它,然后想通过ALT向下/向上键清除它,它就不会这样做,无论您的实现如何,如果您尝试将向下/向上键映射ALTALT+ TAB ⭾

您可以尝试以下方法,但它需要短暂的开/关ALT,并且不检查是否按下了其他键,还允许您多次短按开/关以触发多个ALT+TAB ⭾并切换回上一个活动程序以外的程序;例如,两次快速开/关按下会让您进入倒数第二个程序并更改ALT+TAB ⭾程序列表的顺序。

  • deltaTime如果触发不太正确,请更改比较常数,然后启用deltaTime工具提示以查看触发器按下平均值以设置比较常数:
    ~$LAlt::
      SetTimer, SendAltTab, Off
      If !triggered
        ; Ignore subsequent triggers if user holds down, until Alt Up is triggered
        myTimer:=A_TickCount
      triggered:=True
    Return
    
    ~$LAlt Up::
      triggered:=False
          deltaTime := A_TickCount-myTimer
    
      ;ToolTip % "deltaTime=" deltaTime " (ms)"
    
      If (deltaTime>300) {
        ; Set the max time to not exceed before ignoring (300 - 500ms usually works ok)
        sendCount:=0
        Return
      }
    
      SetTimer, SendAltTab, -200
      sendCount+=1
    Return
    
    SendAltTab:
      SendInput, !{Tab %sendCount%}
      ToolTip % "sendCount=" sendCount
      sendCount:=0
    Return
    
    • 笔记:超时200ms[ ] 是指对于多次按+ SetTimer, SendAltTab, -200,您必须触发额外连续按压的时间长度;如果您不想使用多次按+ ,请禁用时间延迟 [设置为或直接包含代码],这样它就永远不会超过。 ALTTAB ⭾ALTTAB ⭾200ms-1sendCount1
      • ALT这使得触发+时更加快捷,但是使用这种更简单的实现,无论你按下 ALT 多少次或多快,TAB ⭾你都只能触发一个ALT+ 。TAB ⭾
    • 如果不想将其用于多个ALT+ TAB ⭾,您可以调整200ms计时器以要求更快地连续按下,并在最后一次按下时执行得更快,因为它会超时更快),或者您可以放慢速度,以便不必在连续按下时那么快(在最后一次按下时执行会稍微延迟,因为它会超时更慢)。不过,尝试后,下面的计时器值感觉很自然。

如果你需要实际检查其他键,你可以做一个替代实现来设置一个变量↓ ALT按下任何其他键都会取消设置,然后再次检查变量↑ ALT

  • 另一种方法是A_PriorKey检查↓ ALT看看它是否已经改变↑ ALTALT但是,如果您连续两次按下相同的+键,则此操作将不起作用,<whatever>因为看起来好像没有按下键,从而触发ALT+ TAB ⭾

相关内容