前言
目前,我用过的类似 Ctrl+G 的路径跳转工具为数不少,但始终没有能完全满足我需求的。RunAny 虽然部分实现了需求,但由于其菜单会冲突覆盖,实际体验并不理想。
具体来说,现有工具的问题在于,会将所有收藏的文件或文件夹路径不加区分地堆砌在一起。然而在实际工作中,并非在任何场景下都需要看到全部路径。例如:
- 在 Notepad 中,几乎不需要访问存放图片素材的文件夹。
- 同理,在 Photoshop 中,文本文件相关的路径也显得多余。
- 即使是 同一个应用程序,在 不同的对话框 中,对路径的需求也大相径庭。以 VS Code 为例,存放项目的目录和存放工作区的目录通常是分开的;当对话框只与项目有关时,就不需要显示工作区路径,反之亦然。
基于这个需求,单独写了一个ahkv2脚本以配合 Listary 使用 ,总之算是暂时解决了需求, 虽然想到了一些可以加进去的功能,但实在没啥更多动力
,干脆放出来。
核心功能
- 上下文感知菜单:为不同应用程序(如
Notepad.exe与Code.exe)提供完全独立的路径快捷菜单。 - 规则按需细化:可根据对话框的窗口标题(如 “打开” 与 “另存为”)进一步区分,展示更精确的路径选项。
- 动态路径集成:自动抓取并显示当前 Windows 资源管理器、Directory Opus、QTTabBar 中已打开的文件夹路径。(注:未加入 Total Commander 是因为我个人不倾向于使用剪贴板进行交互,不介意的用户可以自行修改实现,可参照坛里这贴FolderMenuList)。
- 一键路径收集 (“快速添加”):在对话框中定位到目标文件夹后,只需点击菜单中的“快速添加”,即可将当前路径或选中的文件/文件夹路径,智能地添加到配置文件中。(注:此功能依赖
UIA库,同样是为了避免占用和操作剪贴板)。 - 无限层级分组:通过简单的文本语法,在菜单中创建任意层级的子菜单(分组),以便清晰、有条理地组织大量路径。
工作原理
当在一个对话框中按下热键时,脚本会通过一个分层匹配逻辑来动态构建菜单:
- 匹配进程名 (
Process Name):脚本首先通过WinGetProcessName()获取当前对话框所属的进程,例如Photoshop.exe。 - 匹配窗口标题 (
Window Title):接着,通过WinGetTitle()获取对话框的标题,例如“另存为…”。此项默认使用正则表达式进行匹配。 - 匹配窗口文本 (
Window Text):最后,通过WinGetText()获取窗口内的其他文本内容,用于更精细的场景判断。此项也默认使用正则表达式。 - 查找规则并构建菜单:脚本在其配置文件
DialogSwitch.ini中,寻找与上述进程、标题、文本规则都匹配的路径条目来生成菜单。 - 预留扩展参数:
ShowContextMenu(*p)函数预留了可变参数p*,为未来更复杂的匹配需求提供了扩展可能。
匹配流程:
- 优先应用最精确的规则(例如,
Photoshop.exe→另存为)。 - 如果找不到针对特定窗口标题的规则,则会回退至该程序下的通用规则(例如,
Photoshop.exe→所有标题)。 - 如果连当前程序的规则都未定义,则会使用全局规则(
所有程序→所有标题)。 - 最后,脚本会将从各类资源管理器中动态获取的路径一并加入到最终菜单中。
这个机制确保了你总能看到一个既包含通用常用路径,又包含当前场景专属路径的最优化菜单。
使用说明
-
环境要求:
- Windows 10(Windows 11 的部分控件可能存在差异,或需自行适配)。
- AutoHotkey v2。
- UIA.ahk 库(仅用于“快速添加”功能,如果不在意剪贴板占用,可自行修改为
Ctrl+C/Ctrl+V的方式实现)。
-
注意事项
- 若使用 Directory Opus,必须在
设置→选项→从任务栏启动中,关闭将图标添加到任务栏选项,否则脚本将无法获取标签页信息。同时,请注意修改脚本中的dopusRT_Path变量为dopusrt.exe实际路径。 - 脚本中的
isPathCollectorEnabled := true变量用于控制是否在菜单中显示快速添加选项。 isSingleGroupExplore := true变量用于控制是否将所有来自资源管理器的动态路径聚合到一个名为explorer的子菜单中。groupUngroupedItems := false变量用于控制配置文件中未被明确分组的路径项的显示方式:false将其直接置于菜单顶层,true则会将其统一聚合在名为-的子菜单下。
- 若使用 Directory Opus,必须在
-
基本操作:
- 打开任意一个标准的“打开”或“保存”对话框(#32770)。
- 按下热键
LWin(左Win键) 或鼠标中键。 - 此时,上下文快捷菜单便会弹出,点击其中的路径即可快速跳转。

配置文件 (DialogSwitch.ini) 详解
通过托盘菜单的“修改配置”来编辑它,或者使用“快速添加”。
语法规则
- 注释:以
;(分号) 开头的行将被忽略。 - 菜单项:
- 格式为
显示名称|实际路径。例如:我的桌面|C:\Users\Admin\Desktop。 - 如果省略
显示名称|,则路径本身将作为菜单项的显示名称。
- 格式为
- 变量:脚本支持使用
{1}来代表当前 Windows 用户名,例如C:\Users\{1}\Downloads会被自动解析为C:\Users\YourUserName\Downloads。
上下文与分组规则
通过在行首添加不同数量的 - (减号) 来定义规则的层级和分组:
-
- 进程名:定义程序。这是最高层级的规则。- 若省略此项直接书写路径,则该路径会被视为 全局规则,对所有程序生效。
-
-- 窗口标题:定义窗口标题。此规则从属于上一级的- 进程名,支持正则表达式。- 若省略此项,则规则将匹配该程序下的 所有窗口标题。
-
--- 控件文本:定义对话框内特定控件的文本。这是一个不常用的高级选项,通常省略即可。 -
---- 分组名称:定义一级子菜单(分组)。 -
----- 分组名称:定义二级子菜单,并可继续增加减号数量来创建更多层级的嵌套。
综合配置示例
; ==================================
; 1. 全局规则 (对所有程序生效)
; ==================================
; 直接写在文件顶部,脚本会自动识别为全局规则
桌面|C:\Users\{1}\Desktop
下载|C:\Users\{1}\Downloads
---- 工作项目
D:\Projects\Project_A
D:\Projects\Project_B
---- 常用工具
----- 开发相关
C:\Program Files\Git
----- 设计素材
E:\Assets\Images
; ==================================
; 2. 针对 VS Code 的特定规则
; ==================================
- Code.exe
---- 前端项目
D:\Work\WebApp\VueProject
D:\Work\WebApp\ReactProject
; 当在 Code.exe 中,且窗口标题匹配“保存工作区”时,显示以下路径
-- 保存工作区
D:\Work\VSCode_Workspaces
; ==================================
; 3. 针对记事本的规则
; ==================================
- Notepad.exe
-- 另存为
C:\Temp\Notes
-- 打开
C:\Users\{1}\Documents




