Autohotkey 如何重新映射alt+;自动热键中的制表符?

Autohotkey 如何重新映射alt+;自动热键中的制表符?,autohotkey,Autohotkey,如何使alt+tab功能像OSX一样工作,在OSX中使用meta+tab而不是alt+tab,同时也遵守shift键 我有解决这个问题的办法。请注意这篇文章的日期,因为我在弄明白这一点之前,已经经历了许多明显过时的解决方案。我在这个问题上工作了大约4个小时,遇到了大量不起作用的解决方案。我是一名有10年经验的专业开发人员,但这个问题几乎要了我的命。注意:我已经通过Windows注册表将RControl映射到我的LWin项上,所以autohotkey位于其上 我找到了许多简单的解决方案 >^

如何使alt+tab功能像OSX一样工作,在OSX中使用meta+tab而不是alt+tab,同时也遵守shift键


我有解决这个问题的办法。请注意这篇文章的日期,因为我在弄明白这一点之前,已经经历了许多明显过时的解决方案。我在这个问题上工作了大约4个小时,遇到了大量不起作用的解决方案。我是一名有10年经验的专业开发人员,但这个问题几乎要了我的命。

注意:我已经通过Windows注册表将RControl映射到我的LWin项上,所以autohotkey位于其上

我找到了许多简单的解决方案

>^Tab::
   Send {LAlt down}{Tab}
   KeyWait RControl
   Send {LAlt up}
   return
这里的问题是它不能处理alt+tab+tab+tab返回3个程序

我还意识到,自动热键将阻止键盘信号,直到您通过释放所有键完成快捷方式,因此,当我按住控制键时发送的任何其他选项卡都将被忽略

我意识到我需要第二个自动热键过程来强制通过。这似乎是一个相当多余的东西写,但这里是我的第二个脚本:

#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
同时运行这些功能。

有一个特殊的复制
Alt+Tab
功能

我还意识到,自动热键将阻止键盘信号,直到您通过释放所有键完成快捷方式,因此在我按住控制键时发送的任何其他选项卡都将被忽略

是的,就是这样。热键创建他们称之为“线程”的东西,默认情况下只能有一个。所以,如果您想在前一个“线程”完成之前再次触发相同的热键,可以使用指令

下面的代码交换
Alt+Tab
Ctrl+Tab
功能-即
Ctrl+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
#UseHook
发送模式输入
#最大线程255
#MaxThreadsPerHotkey 255

我想我花了更多的时间试图让AHK热键做我想做的事情,而这些热键即使我活到一百岁也救不了我。

你的实现看起来很可疑,你看过文档了吗?另外,
#IfWin[Not]Active
不接受表达式,因此不引用传递给它的字符串。即使你犯了那个错误,我也不知道为什么这样做。谢谢你的留言。我对这一切都很陌生,我只是想让别人头疼,所以我真的希望我没有把事情搞得太糟。引用的字符串来自如何使用IfWinActive的示例。我以为我没有引用它。不管怎样,我已经更新了答案。我对它进行了测试,它似乎起了作用。我确实看到了那份文件。问题是,每种可能性似乎都有自己独特的方式被窃听。例如,
^TabM::AltTabMenu
在我释放控件时不会消失,因为ctrl+alt+tab有这种行为。相信我,我很努力地按照推荐的方式去做。是的,很好的东西,你设法找到了一个有效的解决方案。虽然我相信还有一种更漂亮的方法。如果我没有更好的事情要做的话,我可能会尝试一下。这似乎是一个非常好的解决方案。我将继续接受这一点,但我仍在使用一年前制作的两个脚本,它们对我有效,所以我将不再使用我的脚本。
<#Tab::AltTab