AutoHotkey实现 listary的ctrl+g跳转到上次打开的文件夹位置

48 次阅读

本文最后更新于 2026年8月22日。

可以的,AutoHotkey 完全可以实现,而且已经有现成的方案了。

Listary 的 Ctrl+G 功能其实有个专门的称呼叫“Quick Switch” ,本质就是在当前的文件对话框和已打开的资源管理器文件夹之间快速切换

社区里有多款 AutoHotkey 脚本都能很好地模拟这个功能,它们不仅支持 Ctrl+G,有的甚至支持鼠标中键触发 ,并且可以兼容 Total Commander、Directory Opus 等第三方文件管理器 。

⚙️ 两个值得一试的脚本

这里有两个不同侧重点的脚本,你可以根据自己的需求选择:

  • Easy Access to Currently Opened Folders:一个经典的轻量级实现,完全开源。它会在“打开/保存”对话框中按下 Ctrl+G 或鼠标中键时,弹出一个菜单列出当前所有已打开的资源管理器窗口路径,点击即可跳转 。如果你追求简洁,可以从这个脚本入手。
  • DialogSwitch:这是一个功能更强大的方案,由国内社区开发。它的核心亮点是上下文感知,可以为不同的程序(比如记事本和 Photoshop)分别设置独立的快速访问菜单 。例如,它在 Photoshop 的“另存为”对话框中,可以只显示你预设的图片相关路径 。此外,它还支持自动抓取资源管理器、DOpus 等程序中的当前路径,并提供了“快速添加”当前路径到菜单的功能 。如果你需要更灵活、更个性化的管理,可以研究这个。

💡 实现的关键点

要自己编写或修改这类脚本,关键在于如何获取当前活动的资源管理器窗口的路径。一个通用的方法是通过 Windows 的 Shell.Application COM 对象来获取 :

; 获取当前活动资源管理器窗口的路径
GetActiveExplorerPath() {
    explorerHwnd := WinActive("ahk_class CabinetWClass") ; 或 "ExploreWClass"
    if (explorerHwnd) {
        for window in ComObject("Shell.Application").Windows {
            if (window.hwnd == explorerHwnd) {
                return window.Document.Folder.Self.Path
            }
        }
    }
}

拿到路径后,再通过 ControlSetText 或直接向对话框的地址栏控件(通常是 Edit1)发送路径文本,即可实现跳转 。