如何仅在 Windows 资源管理器处于活动状态时分配热键来导航文件夹?

How to assign hotkeys to navigate folders only when Windows Explorer is active?

我想使用数字快速浏览一些常用文件夹仅当 Windows 资源管理器处于活动状态时;这些键在其他程序中的使用没有改变。 This thread 提供的代码符合我的需要,除非它会使用 Run 如果没有资源管理器 window 处于活动状态,我在下面的代码中删除了它:

#e::Run Explorer D:\Download
1::NavRun("D:\Download")
3::NavRun("E:\Setups")
4::NavRun("E:\Music")
8::NavRun("D:\")
9::NavRun("E:\")
0::NavRun("F:\")

; http://msdn.microsoft.com/en-us/library/bb774094
GetActiveExplorer() {
    static objShell := ComObjCreate("Shell.Application")
    WinHWND := WinActive("A")    ; Active window
    for Item in objShell.Windows
        if (Item.HWND = WinHWND)
            return Item        ; Return active window object
    return -1    ; No explorer windows match active window
}

NavRun(Path) {
    if (-1 != objIE := GetActiveExplorer())
        objIE.Navigate(Path)
}

但是,我不能再在任何其他程序中使用脚本中列出的数字。如何再次使用它们?

试试这个:

在资源管理器中按住按键超过 0.3 秒可导航至目录。

#UseHook

#If WinActive("ahk_class CabinetWClass") || WinActive("ahk_class ExploreWClass") ; explorer

    1::
    2::
    3::
    4::
    KeyWait, %A_ThisHotkey%, T0.3
    if (ErrorLevel)
        long_press := true
    else
        Send, %A_ThisHotkey%
    return

#If (long_press)

    1 Up::
    2 Up::
    3 Up::
    4 Up::
    long_press := false
    If (A_PriorHotKey = "1")
        NavRun("C:\")
    If (A_PriorHotKey = "2")
        NavRun("D:\")
    If (A_PriorHotKey = "3")
        NavRun("E:\")
    return

#If

; http://msdn.microsoft.com/en-us/library/bb774094
GetActiveExplorer() {
    static objShell := ComObjCreate("Shell.Application")
    WinHWND := WinActive("A")    ; Active window
    for Item in objShell.Windows
        if (Item.HWND = WinHWND)
            return Item        ; Return active window object
    return -1    ; No explorer windows match active window
}

NavRun(Path) {
    if (-1 != objIE := GetActiveExplorer())
        objIE.Navigate(Path)
    else
        Run, % Path
}

如果您想在资源管理器中键入文本,这样您就可以正常使用按键。