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

问题描述:

仅当Windows资源管理器处于活动状态时,我想使用数字快速导航某些常用文件夹;在其他程序中使用这些密钥是不变的。 This thread提供的代码符合我的需求,但它会使用Run如果没有资源管理器窗口被激活,我在下面的代码剥离出来:仅当Windows资源管理器处于活动状态时,如何分配热键才能导航文件夹?

#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

使用[#IfWinActive](https://autohotkey.com/docs/commands/_IfWinActive.htm)指令使您的热键具有上下文敏感性。用''#IfWinActive,ahk_class CabinetWClass'替换''#IfWinActive [,WinTitle,WinText]'“(CabinetWClass是Windows资源管理器的窗口类)并添加”#IfWinActive'“来关闭上下文敏感性。 – user3419297

+0

它的工作原理,除了在资源管理器中的热键不工作 – Ooker

试试这个:

保持在资源管理器中按下的时间小于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 
} 

这样,如果您想在资源管理器中键入文本,则可以以普通方式使用这些键。

+0

谢谢。我使它达到0.1以使印刷机更自然。到目前为止对我来说很好。 – Ooker