AHK:打开文件夹或激活已打开的文件夹

AHK:打开文件夹或激活已打开的文件夹

我在用着自动热键并尝试这样做:

  • 打开下载文件夹(Q:\Down就我而言)或激活它(如果已经打开)(子文件夹不算,例如Q:\Down如果我Q:\Down\phvideos已经打开则仍然打开)

我正在使用的脚本

Run "Q:\Down"

或者

Run % "explorer /expand, Q:\Down\"

两者都可以打开这样的文件夹,但再次激活它会在资源管理器中打开一个重复的窗口。

是否有任何命令可以打开唯一的文件夹,或者检测打开的资源管理器窗口中是否存在给定的文件夹路径?

答案1

如果你有选择

在标题栏中显示完整路径已启用,

您可以使用

SetTitleMatchMode, 3
If WinExist("Q:\Down ahk_class CabinetWClass")
    WinActivate
else
    Run % "explorer /expand, Q:\Down\"

否则你可以尝试这个:

Run_explorer("Q:\Down")

Run_explorer(path) {
    If InStr(explorer_list(), path)
    {
        Loop, Parse, % explorer_list(), `n
        {
            If InStr(A_LoopField, path)
            {
                ID := StrSplit(A_LoopField,"_").1
                WinActivate, ahk_id %ID%
                    break
            }
        }
    }
    else
        Run % path
}

explorer_list() {
    ; Get ID + fullpath of all opened explorer windows:
    If WinExist("ahk_class CabinetWClass") ; explorer
    {
        list := ""
        ; https://autohotkey.com/boards/viewtopic.php?p=28751#p28751
        for window in ComObjCreate("Shell.Application").Windows
        {
            try explorer_path := window.Document.Folder.Self.Path
            If (explorer_path = "")
                continue
            WinGet, ID, ID, % explorer_path
            list .= ID "_" explorer_path ? ID "_" explorer_path "`n" : "" 
        }
        list := trim(list, "`n")
        return list
    }
}

答案2

我已经忘记了这个问题,哈哈,这是我现在的脚本,为了帮助未来的用户

global DOWNLOAD_FOLDER := "K:\Down"
; win + q   Open Down
#q::
{
    downWinTitle := "Down ahk_class CabinetWClass"
    WinGet explorerHwnd, ID, % downWinTitle
    path := GetExplorerPath(explorerHwnd)
    if(!explorerHwnd || path != DOWNLOAD_FOLDER){
        Run % "explorer /expand, " . DOWNLOAD_FOLDER
        WinWait % downWinTitle
        WinGet explorerHwnd, ID, % downWinTitle
    }
    WinActivate % "ahk_id " . explorerHwnd
    Return
}

相关内容