-
-
Save Onurtag/166df8b88744c48e93a64b7c89652e0a to your computer and use it in GitHub Desktop.
#SingleInstance Force | |
#NoTrayIcon ;If you want the tray icon to be visible; comment this line by adding a semicolon ; in front of the #. Example: ;#NoTrayIcon | |
EverythingPath := "C:\Program Files\Everything\Everything.exe" ;Set this to your everything.exe path. Keep the quotes. | |
;---Optional setup for special folders--- | |
MyRecycleBin := "Recycle Bin" ;If your OS is not English, go to your explorer's "Recycle Bin" (🚮) folder and change this to the title of that window. Keep the quotes. | |
MyThisPC := "This PC" ;If your OS is not English, go to your explorer's "This PC" (💻) folder and change this to the title of that window. Keep the quotes. | |
MyHome := "Home" ;(Windows 11) If your OS is not English, go to your explorer's "Home" (🏠) folder and change this to the title of that window. Keep the quotes. | |
MyFullName := "" | |
try { | |
;Get full user name (for file picking dialog) | |
MyFullName := GetUserFullName() | |
} catch e { | |
MyFullName := "" | |
} | |
EnvGet, UserProfile, UserProfile | |
;Default hotkey is ^F (Ctrl+F). Replace each ^F with F3 if you want to use that hotkey instead. | |
;You may delete each block below if you don't need its features. | |
;BLOCK 1 - DESKTOPS | |
#If, WinActive("ahk_class WorkerW") or WinActive("ahk_class Progman") | |
^F:: | |
RunPath = -p "%UserProfile%\Desktop\" | |
Run, %EverythingPath% %RunPath% | |
WinWait, ahk_exe everything.exe,, 2 | |
if (!ErrorLevel) { | |
Sleep, 125 | |
WinActivate, ahk_exe everything.exe | |
} | |
Return | |
;BLOCK 2 - TASKBARS | |
#If, WinActive("ahk_class Shell_TrayWnd") or WinActive("ahk_class Shell_SecondaryTrayWnd") | |
^F:: | |
Run, %EverythingPath% | |
WinWait, ahk_exe everything.exe,, 2 | |
if (!ErrorLevel) { | |
Sleep, 125 | |
WinActivate, ahk_exe everything.exe | |
} | |
Return | |
;BLOCK 3 - EXPLORER WINDOWS and FILE PICKING DIALOGS (only for the full file picking dialog) | |
#If, WinActive("ahk_class CabinetWClass") or WinActive("ahk_class #32770") | |
^F:: | |
;Try using the GetExplorerPath method (doesn't work on the file picker dialog) | |
;Doesn't work with Recycle Bin, This PC, Home... (probably more) | |
RunPath := GetActiveExplorerPath() | |
if (InStr(RunPath, "::{")) { | |
;If the function returns a GUID path, retry using the manual method below. | |
RunPath := "" | |
} else if (RunPath != "") { | |
;Finalize commandline | |
RunPath = -p "%RunPath%" | |
} | |
if (RunPath == "") { | |
;Function method failed OR this is a file picking dialog | |
;To find the correct control path use an inspector application (UIAViewer, System Informer, Winspector etc..) | |
;Find Breadcrumb Parent1 -> ToolbarWindow321 | |
ControlGet, crumbHWND, Hwnd,, Breadcrumb Parent1, A | |
ControlGetText, RunPath, ToolbarWindow321, ahk_id %crumbHWND% | |
;Cleanup the string (Location: C:\Dir1\Dir2) | |
;Windows paths can't include the ":" character so we don't need to combine result[2]...result[last] | |
try { | |
RunPath := StrSplit(RunPath, ": ")[2] | |
} | |
if (RunPath == "") { | |
;If we are still unable to find breadcrumb text, try again using the window title. This can help us detect some special named folders. | |
WinGetTitle, windowTitle, A | |
RunPath := windowTitle | |
} | |
if (FileExist(RunPath)) { ;Check if its a regular path | |
;Finalize commandline | |
RunPath = -p "%RunPath%" | |
} else if (FileExist(UserProfile . "\" . RunPath)) { ;Check if its a user folder | |
RunPath = -p "%UserProfile%\%RunPath%\" | |
;Check special named paths | |
} else if (RegExMatch(RunPath, "^" . MyThisPC) || RegExMatch(RunPath, "^" . MyHome)) { ;This PC or Home | |
RunPath := "" | |
} else if (RegExMatch(RunPath, "^" . MyRecycleBin)) { ;Recycle Bin | |
RunPath = -s "\$RECYCLE.BIN " | |
} else if (MyFullName && RegExMatch(RunPath, "^" . MyFullName)) { ;UserProfile folder (using MyFullName) | |
RunPath = -p "%UserProfile%" | |
} else { | |
;Abort | |
RunPath = "" | |
} | |
} | |
;Uncomment below for debugging | |
; MsgBox, %EverythingPath% %RunPath% | |
Run, %EverythingPath% %RunPath% | |
WinWait, ahk_exe everything.exe,, 2 | |
if (!ErrorLevel) { | |
Sleep, 125 | |
WinActivate, ahk_exe everything.exe | |
} | |
Return | |
#If | |
;FUNCTIONS | |
GetUserFullName() { | |
username := A_UserName | |
; Connect to the WMI service | |
objWMIService := ComObjGet("winmgmts:{impersonationLevel=impersonate}!" . "\\.\root\cimv2") | |
; Query the Win32_UserAccount class for the current username | |
colItems := objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name='" . username . "'") | |
; Loop through the results to get the FullName | |
for objItem in colItems { | |
return objItem.FullName | |
} | |
} | |
;GetActiveExplorerPath by ntepa https://www.autohotkey.com/boards/viewtopic.php?p=507423#p507423 | |
;Works correctly in all situations except for special ::{GUID} folders (Recycle Bin, Home, Gallery) | |
GetActiveExplorerPath() { | |
hwnd := WinActive("ahk_class CabinetWClass") | |
activeTab := 0 | |
try ControlGet, activeTab, Hwnd,, % "ShellTabWindowClass1", % "ahk_id" hwnd | |
for w in ComObjCreate("Shell.Application").Windows { | |
if (w.hwnd != hwnd) | |
continue | |
if activeTab { | |
static IID_IShellBrowser := "{000214E2-0000-0000-C000-000000000046}" | |
shellBrowser := ComObjQuery(w, IID_IShellBrowser, IID_IShellBrowser) | |
DllCall(NumGet(numGet(shellBrowser+0)+3*A_PtrSize), "Ptr", shellBrowser, "UInt*", thisTab) | |
if (thisTab != activeTab) | |
continue | |
ObjRelease(shellBrowser) | |
} | |
return w.Document.Folder.Self.Path | |
} | |
} |
I'm guessing thats probably the new WinUI 3 explorer. I will take a look at it soon.
@kaiwizz Can you tell me your full windows version? It should be at the top when you open a cmd window.
It should be something like Microsoft Windows [Version 10.0.22621.2428]
.
I just tested on the version above and everything worked fine (two windows both with multiple tabs). I am asking for the version you are using so I can decide whether I should update to a pre-release insider version.
@Onurtag Microsoft Windows [Version 10.0.22621.2428]
.
@kaiwizz Thank you. It looks like this right?
@Onurtag yes.
@kaiwizz I pushed an update but I'm not sure if this will fix your problem. Download the new version, test it and let me know if you still have problems.
@Onurtag Tested your new script today. So Far I have not faced any issues. Thanks a lot.
@kaiwizz Great! Thanks for the bug report and the confirmation.
@Onurtag , the latest Windows update broke the script again.
I think the issue is, after the current Windows update, "- File Explorer"
is added to the path as, "C:\Users\testUser\Documents\folder\subfolder - File Explorer\"
@kaiwizz Thanks for the detailed report! I am now updating my win11 setup to the latest release preview.
It is easy to just strip the "- File Explorer"
from the string but that might not work on any other language so I need to see it for myself.
@kaiwizz I have updated the script with some changes, let me know how it works for you now.
I tested the script on 3 different Windows 11 versions but I was unable to replicate the error that adds the - File Explorer
string to the folder path. This might be caused by the A/B testing system used by Microsoft.
If the script is still not working I might need some extra info like your current windows version (its visible on cmd) and whether the script is broken on every folder or just a few folders like pictures, videos etc.
@Onurtag
Thanks for the fixes, it's working for me now.
From cmd, Microsoft Windows [Version 10.0.22631.4169]
@kaiwizz Great to hear!
@Onurtag , The last Windows update messed up the script, it is not working for tabbed windows anymore for me. It is actually not working in single folders if I am in some folder other than the windows folders like Documents or Downloads.