仅当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.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
使用[#IfWinActive](https://autohotkey.com/docs/commands/_IfWinActive.htm)指令使您的热键具有上下文敏感性。用''#IfWinActive,ahk_class CabinetWClass'替换''#IfWinActive [,WinTitle,WinText]'“(CabinetWClass是Windows资源管理器的窗口类)并添加”#IfWinActive'“来关闭上下文敏感性。 – user3419297
它的工作原理,除了在资源管理器中的热键不工作 – Ooker