你如何在 autohotkey 中重新映射 alt+tab?
How do you remap alt+tab in autohotkey?
如何使您的 alt+tab 功能像 OSX 一样使用 meta+tab 而不是 alt+tab,同时还尊重 shift 键?
我有解决办法。请注意此 post 的日期,因为在弄清楚这一点之前,我已经经历了许多明显过时的解决方案。我已经处理这个问题总共大约 4 个小时,并且遇到了很多不起作用的解决方案。我是 10 年的专业开发人员,但这个问题差点要了我的命。
注意:我已通过 Windows 注册表将 RControl 映射到我的 LWin 密钥,因此 autohotkey 位于其之上。
我找到了很多简单的解决方案
>^Tab::
Send {LAlt down}{Tab}
KeyWait RControl
Send {LAlt up}
return
这里的问题是它不处理 alt+tab+tab+tab 返回 3 个程序。
我还意识到 AutoHotKeys 会阻止键盘信号,直到您通过释放所有键完成快捷方式,所以在我按住控制键时发送的任何其他选项卡都将被忽略。
我意识到我需要第二个 AutoHotKeys 进程来强制完成。写起来似乎有点多余,但这是我的第二个脚本:
#IfWinActive "ahk_class TaskSwitcherWnd"
Tab::Send {Tab}
#IfWinActive
如果你不熟悉,#IfWinActive
的东西只是为了让它不会在每次发送 Tab 键时触发 - 它只是在 Windows' 任务切换器是焦点。最终,这个脚本只是说 Tab::Send {Tab}
.
然后你需要告诉它也对 shift 键做出反应。奇怪的是,任务切换器可以很好地监听但不是 Tab,因此我们也不需要在该脚本中转发 Shift 键。
最终,我的两个脚本如下所示:
脚本 1
#IfWinNotActive ahk_class TaskSwitcherWnd
; Remap Ctrl-Tab to Alt-Tab
$>^Tab::
Send {Alt down}{Tab}
Keywait Control
Send {Alt up}
return
; Remap Ctrl-Shift-Tab to Alt-Shift-Tab
$>^+Tab::
Send {Alt down}{Shift down}{Tab}
Keywait Control
Send {Alt up}{Shift up}
return
#IfWinActive
脚本 2
#IfWinActive ahk_class TaskSwitcherWnd
Tab::Send {Tab}
#IfWinActive
运行这些同时。
有一个特殊的 keyword 可以复制 Alt + Tab
功能。
I also realized that AutoHotkey will block keyboard signals until you've completed the shortcut by releasing all keys, so any additional tabs that are sent while I held down the control key are ignored.
是的,确实如此。热键创建了他们称之为“线程”的东西,默认情况下只能有一个。所以如果你想在前一个“线程”完成之前再次触发相同的热键,你可以使用 #MaxThreadsPerHotkey 指令。
下面的代码交换了 Alt + Tab
和 Ctrl + Tab
功能——即 Ctrl + Tab
将在应用程序之间切换,Alt + Tab
将在浏览器的选项卡之间切换。线程限制为 255,这意味着您可以按住 Ctrl
并且(理论上)在它停止工作之前按 Tab
255 次。
#UseHook
SendMode Input
#MaxThreads 255
#MaxThreadsPerHotkey 255
<!Tab::
Send {LCtrl down}{Tab}
Keywait LAlt
Send {LCtrl up}
return
#MaxThreadsPerHotkey
<^Tab::AltTab
我想我花了更多的时间试图让 AHK 热键做我想做的事,而不是他们可能拯救我,即使我活到一百岁。
<#Tab::AltTab
这会将“win + tab”重新映射为“alt tab”。它也适用于多次按 Tab 键。
如何使您的 alt+tab 功能像 OSX 一样使用 meta+tab 而不是 alt+tab,同时还尊重 shift 键?
我有解决办法。请注意此 post 的日期,因为在弄清楚这一点之前,我已经经历了许多明显过时的解决方案。我已经处理这个问题总共大约 4 个小时,并且遇到了很多不起作用的解决方案。我是 10 年的专业开发人员,但这个问题差点要了我的命。
注意:我已通过 Windows 注册表将 RControl 映射到我的 LWin 密钥,因此 autohotkey 位于其之上。
我找到了很多简单的解决方案
>^Tab::
Send {LAlt down}{Tab}
KeyWait RControl
Send {LAlt up}
return
这里的问题是它不处理 alt+tab+tab+tab 返回 3 个程序。
我还意识到 AutoHotKeys 会阻止键盘信号,直到您通过释放所有键完成快捷方式,所以在我按住控制键时发送的任何其他选项卡都将被忽略。
我意识到我需要第二个 AutoHotKeys 进程来强制完成。写起来似乎有点多余,但这是我的第二个脚本:
#IfWinActive "ahk_class TaskSwitcherWnd"
Tab::Send {Tab}
#IfWinActive
如果你不熟悉,#IfWinActive
的东西只是为了让它不会在每次发送 Tab 键时触发 - 它只是在 Windows' 任务切换器是焦点。最终,这个脚本只是说 Tab::Send {Tab}
.
然后你需要告诉它也对 shift 键做出反应。奇怪的是,任务切换器可以很好地监听但不是 Tab,因此我们也不需要在该脚本中转发 Shift 键。
最终,我的两个脚本如下所示:
脚本 1
#IfWinNotActive ahk_class TaskSwitcherWnd
; Remap Ctrl-Tab to Alt-Tab
$>^Tab::
Send {Alt down}{Tab}
Keywait Control
Send {Alt up}
return
; Remap Ctrl-Shift-Tab to Alt-Shift-Tab
$>^+Tab::
Send {Alt down}{Shift down}{Tab}
Keywait Control
Send {Alt up}{Shift up}
return
#IfWinActive
脚本 2
#IfWinActive ahk_class TaskSwitcherWnd
Tab::Send {Tab}
#IfWinActive
运行这些同时。
有一个特殊的 keyword 可以复制 Alt + Tab
功能。
I also realized that AutoHotkey will block keyboard signals until you've completed the shortcut by releasing all keys, so any additional tabs that are sent while I held down the control key are ignored.
是的,确实如此。热键创建了他们称之为“线程”的东西,默认情况下只能有一个。所以如果你想在前一个“线程”完成之前再次触发相同的热键,你可以使用 #MaxThreadsPerHotkey 指令。
下面的代码交换了 Alt + Tab
和 Ctrl + Tab
功能——即 Ctrl + Tab
将在应用程序之间切换,Alt + Tab
将在浏览器的选项卡之间切换。线程限制为 255,这意味着您可以按住 Ctrl
并且(理论上)在它停止工作之前按 Tab
255 次。
#UseHook
SendMode Input
#MaxThreads 255
#MaxThreadsPerHotkey 255
<!Tab::
Send {LCtrl down}{Tab}
Keywait LAlt
Send {LCtrl up}
return
#MaxThreadsPerHotkey
<^Tab::AltTab
我想我花了更多的时间试图让 AHK 热键做我想做的事,而不是他们可能拯救我,即使我活到一百岁。
<#Tab::AltTab
这会将“win + tab”重新映射为“alt tab”。它也适用于多次按 Tab 键。