Skip to content

Instantly share code, notes, and snippets.

@Onurtag
Last active November 5, 2024 20:05
Show Gist options
  • Save Onurtag/166df8b88744c48e93a64b7c89652e0a to your computer and use it in GitHub Desktop.
Save Onurtag/166df8b88744c48e93a64b7c89652e0a to your computer and use it in GitHub Desktop.
ExploreEverything.ahk: An autohotkey (ahk v1) script that allows you to search the current explorer folder, your desktop and more using Everything
#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
}
}
@kaiwizz
Copy link

kaiwizz commented Feb 13, 2023

Hello @Onurtag ,

I am having issues with your script. If I have a single tab in explorer, then your script works, but if I have multiple tabs opened and try to search in any of those tabs, it breaks.

I am using windows 11, Version 10.0.22621 Build 22621.

@Onurtag
Copy link
Author

Onurtag commented Feb 13, 2023

@kaiwizz I'll take a look tomorrow

@Onurtag
Copy link
Author

Onurtag commented Feb 15, 2023

@kaiwizz I updated the script with the fix for the tabbed explorer. It should work much better now.
Thanks for the bug report.

@kaiwizz
Copy link

kaiwizz commented Oct 11, 2023

@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.

@Onurtag
Copy link
Author

Onurtag commented Oct 12, 2023

I'm guessing thats probably the new WinUI 3 explorer. I will take a look at it soon.

@Onurtag
Copy link
Author

Onurtag commented Oct 12, 2023

@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.

@kaiwizz
Copy link

kaiwizz commented Oct 12, 2023

@Onurtag Microsoft Windows [Version 10.0.22621.2428].

@Onurtag
Copy link
Author

Onurtag commented Oct 12, 2023

@kaiwizz Thank you. It looks like this right?
image

@kaiwizz
Copy link

kaiwizz commented Oct 12, 2023

@Onurtag yes.

@Onurtag
Copy link
Author

Onurtag commented Oct 12, 2023

@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.

@kaiwizz
Copy link

kaiwizz commented Oct 18, 2023

@Onurtag Tested your new script today. So Far I have not faced any issues. Thanks a lot.

@Onurtag
Copy link
Author

Onurtag commented Oct 18, 2023

@kaiwizz Great! Thanks for the bug report and the confirmation.

@kaiwizz
Copy link

kaiwizz commented Sep 11, 2024

@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\"

@Onurtag
Copy link
Author

Onurtag commented Sep 12, 2024

@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.

@Onurtag
Copy link
Author

Onurtag commented Sep 14, 2024

@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.

@kaiwizz
Copy link

kaiwizz commented Sep 17, 2024

@Onurtag
Thanks for the fixes, it's working for me now.

From cmd, Microsoft Windows [Version 10.0.22631.4169]

@Onurtag
Copy link
Author

Onurtag commented Sep 17, 2024

@kaiwizz Great to hear!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment