我试图通过单击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向下/向上键清除它,它就不会这样做,无论您的实现如何,如果您尝试将向下/向上键映射ALT为ALT+ 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
-1
sendCount
1
- ALT这使得触发+时更加快捷,但是使用这种更简单的实现,无论你按下 ALT 多少次或多快,TAB ⭾你都只能触发一个ALT+ 。TAB ⭾
- 如果不想将其用于多个ALT+ TAB ⭾,您可以调整
200ms
计时器以要求更快地连续按下,并在最后一次按下时执行得更快,因为它会超时更快),或者您可以放慢速度,以便不必在连续按下时那么快(在最后一次按下时执行会稍微延迟,因为它会超时更慢)。不过,尝试后,下面的计时器值感觉很自然。
- 笔记:超时
如果你需要实际检查其他键,你可以做一个替代实现来设置一个变量↓ ALT按下任何其他键都会取消设置,然后再次检查变量↑ ALT。
- 另一种方法是
A_PriorKey
检查↓ ALT看看它是否已经改变↑ ALTALT但是,如果您连续两次按下相同的+键,则此操作将不起作用,<whatever>
因为看起来好像没有按下键,从而触发ALT+ TAB ⭾。