Autohotkey 和 Windows 10:如何获取当前资源管理器路径

Posted

技术标签:

【中文标题】Autohotkey 和 Windows 10:如何获取当前资源管理器路径【英文标题】:Autohotkey and Windows 10: How to get current explorer path 【发布时间】:2017-01-08 06:14:35 【问题描述】:

我使用自动热键版本:1.0.48.05(因为我坚​​持使用 activeaid)。 读取当前路径的脚本如下(一直工作到 Win 7)。

; Get full path from open Explorer window
WinGetText, FullPath, A

; Clean up result
StringReplace, FullPath, FullPath, `r, , all
FullPath := RegExReplace(FullPath, "^.*`nAddress: ([^`n]+)`n.*$", "$1")

我如何怀疑在切换到 Win10 时似乎我也切换了语言。 如果我在清理之前将 MsgBox 取出 %FullPath% WinGetText,全路径,一个 消息框 %FullPath% 我在其他字符串中看到(显然由 CR 分隔): 地址:V:\Vertrieb\Prospects\MyFile

那么我需要如何调整正则表达式来提取那个字符串!

最好的问候 汉内斯

【问题讨论】:

【参考方案1】:
#IWinActive, ahk_class CabinetWClass ; explorer

    F1:: MsgBox, % GetActiveExplorerPath()

    ; or
    F2:: 
        ActiveExplorerPath := GetActiveExplorerPath()
        MsgBox, % ActiveExplorerPath
    return

#IWinActive

; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=69925

GetActiveExplorerPath() 
    explorerHwnd := WinActive("ahk_class CabinetWClass")
    if (explorerHwnd)
    
        for window in ComObjCreate("Shell.Application").Windows
        
            if (window.hwnd==explorerHwnd)
                return window.Document.Folder.Self.Path
        
    

【讨论】:

您可以下载AHK_L的便携版来运行代码或使用autohotkey.com/download的编译器将脚本编译为.exe。 有一个由 Sean 编写的 COM 库,适用于旧版本的 AutoHotkey 1.0,您必须修改上面的代码才能使用它,因为它在语法上与内置的 COM 支持不同获取最新版本的 AutoHotkey。此外,没有 AHK_L,它只是 AutoHotkey 1.1,因为 Lexicos 已经接管了 AutoHotkey 的主要开发者。【参考方案2】:

试试:

f1::MsgBox % Explorer_GetSelection()

Explorer_GetSelection(hwnd="") 
    WinGet, process, processName, % "ahk_id" hwnd := hwnd? hwnd:WinExist("A")
    WinGetClass class, ahk_id %hwnd%
    if  (process = "explorer.exe") 
        if (class ~= "(Cabinet|Explore)WClass") 
            for window in ComObjCreate("Shell.Application").Windows
                if  (window.hwnd==hwnd)
                    path := window.Document.FocusedItem.path

            SplitPath, path,,dir
        
        return dir

【讨论】:

干得好;也许在#If WinActive("ahk_class CabinetWClass") || WinActive("ahk_class ExlorerWClass") 中包含f1 热键定义对于将热键限制为文件资源管理器窗口是有意义的。出于好奇:我似乎只将CabinetWClass 视为窗口类;什么时候ExplorerWClass,还有其他课吗? @mklement0 这是为了与旧版本的 Windows(Vista 之前)兼容。有关简短示例,请参阅WinTitle->ahk_group 的文档。【参考方案3】:

我花了很多时间(对我而言)找到最佳解决方案。 也许它也对你有用。

ControlClick, ToolbarWindow323, A
ControlGetText, path, Edit1, A
Msgbox, %path%

【讨论】:

我建议使用Send Ctrl downlCtrl up 而不是ControlClick。有时它对我不起作用。

以上是关于Autohotkey 和 Windows 10:如何获取当前资源管理器路径的主要内容,如果未能解决你的问题,请参考以下文章

用 AutoHotkey 做为 win32 程序的库

;010_跟随Windows7一起启动的AutoHotkey全自动化热键脚本源代码(长期实际测试完美进化版)

Autohotkey用控制lbutton替换alt和lbutton?

;~ 并发运行的AutoHotkey脚本真机实际测试模板参考20191010.ahk

如何用AutoHotKey运行Edge浏览器

如何强制 Windows 忽略 AutoHotKey 并将该热键直接传递给活动窗口?