可在autohotkey中通过groupadd定义窗口组,配合热键(如^!tab)或鼠标侧键循环激活组内窗口,并利用ahk_class、ahk_exe及正则匹配提升稳定性与精准度。

如果您希望在AutoHotkey中将多个窗口归类为一个逻辑组,并通过快捷键快速在这些窗口之间循环切换,则需要借助GroupAdd命令配合WinActivate、WinWaitActive等指令实现窗口分组管理。以下是具体操作步骤:
一、定义窗口组并添加匹配窗口
GroupAdd命令用于创建一个命名窗口组,后续可通过该名称统一控制所有加入的窗口。窗口可通过标题、类名、进程名或正则表达式匹配方式加入,确保目标窗口具备稳定可识别特征。
1、打开记事本,新建一个.ahk文件,例如WindowGroup.ahk。
2、输入以下基础代码创建名为"MyEditorGroup"的窗口组:
GroupAdd, MyEditorGroup, Untitled - Notepad
3、继续添加其他符合标题特征的窗口,例如:
GroupAdd, MyEditorGroup, ahk_class Notepad
4、若需匹配多个不同标题但含共同关键词的窗口,使用正则模式:
GroupAdd, MyEditorGroup, ahk_exe code.exe
GroupAdd, MyEditorGroup, ahk_exe vscode.exe
二、设置快捷键实现组内窗口循环激活
利用Loop与WinExist遍历窗口组成员,结合WinActivate按顺序激活下一个可见且存在的窗口,从而实现快捷键驱动的循环切换逻辑。
1、在脚本中添加热键定义,例如使用Ctrl+Alt+Tab切换组内窗口:
^!Tab::
2、插入循环逻辑:先获取当前活动窗口是否属于该组,再查找下一个符合条件的窗口句柄:
GroupActivate, MyEditorGroup
return
3、若需更精确控制(如跳过最小化窗口),可改用自定义循环:
^!Tab::
GroupGet, windowList, MyEditorGroup
Loop, Parse, windowList, `n
{
if (A_LoopField != "") {
WinGet, state, ExStyle, ahk_id %A_LoopField%
if !(state & 0x1000000) ; 排除已最小化的窗口
WinActivate, ahk_id %A_LoopField%
break
}
}
return
三、使用窗口类名与进程名双重匹配增强稳定性
仅依赖窗口标题易受动态变化影响(如文档名变更),结合ahk_class或ahk_exe可显著提升匹配鲁棒性,尤其适用于VS Code、Chrome多标签页等场景。
1、确认目标程序的窗口类名:运行AutoHotkey自带Window Spy工具,点击目标窗口获取Class值。
2、在脚本中同时添加类名与进程名规则:
GroupAdd, MyBrowserGroup, ahk_class Chrome_WidgetWin_1
GroupAdd, MyBrowserGroup, ahk_exe chrome.exe
3、对Electron应用(如Slack、Discord)补充通用类名:
GroupAdd, MyBrowserGroup, ahk_class Chrome_WidgetWin_0
4、保存脚本后右键选择“Reload this script”生效配置。
四、排除干扰窗口并限定匹配范围
当多个相似窗口共存时(如多个Notepad实例),可通过排除特定标题或添加唯一标识避免误匹配,确保切换行为精准作用于预期窗口集合。
1、使用Exclude参数跳过含特定文本的窗口:
GroupAdd, MyEditorGroup, Untitled - Notepad, Exclude, Backup
2、为每个目标窗口手动指定唯一标题前缀,例如重命名窗口标题为"[EDITOR] main.py",再匹配:
GroupAdd, MyEditorGroup, \[EDITOR\].*, MatchMode, RegEx
3、启用正则匹配模式需前置声明:
SetBatchLines, -1
GroupAdd, MyEditorGroup, .*Notepad.*, MatchMode, RegEx
4、执行WinGetClass或WinGetTitle验证实际匹配结果,确保无遗漏或冗余。
五、绑定鼠标侧键或自定义组合键触发切换
除标准键盘热键外,AutoHotkey支持XButton1/XButton2(鼠标前进/后退键)等硬件事件,可释放常用按键资源并提升操作效率。
1、启用鼠标侧键监听,在脚本开头添加:
#InstallMouseHook
2、将XButton1绑定为向前切换,XButton2为向后切换:
XButton1::GroupActivate, MyEditorGroup
XButton2::
GroupGet, list, MyEditorGroup
StringSplit, arr, list, `n
Loop, %arr0%
{
if (arr%A_Index% = A_ID)
{
target := arr%A_Index-1%
if (A_Index = 1)
target := arr%arr0%
WinActivate, ahk_id %target%
break
}
}
return
3、重启脚本使鼠标钩子生效,确保AutoHotkey以管理员权限运行以捕获全局XButton事件。











