Skip to content

Instantly share code, notes, and snippets.

@Onurtag
Last active March 14, 2026 14:38
Show Gist options
  • Select an option

  • Save Onurtag/166df8b88744c48e93a64b7c89652e0a to your computer and use it in GitHub Desktop.

Select an option

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
; ALTERNATIVE METHOD: Try the built-in Everything option "hotkey_explorer_path_search"
; ^^^INFO: https://www.voidtools.com/forum/viewtopic.php?p=17390#p17390
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() {
try {
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
}
} catch e {
;MsgBox,, ExploreEverything Error, % e.Message
;Return blank on failure
return ""
}
}
@NightMean
Copy link

As this script is only for Autohotkey v1 and I currently need to use v2, I've asked AI to modify it to be compatible with v2. To my surprise it worked on the first try. There might be bugs that I do not know about but from simple testing it worked as expected.

#Requires AutoHotkey v2.0
#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

; ALTERNATIVE METHOD: Try the built-in Everything option "hotkey_explorer_path_search"
; ^^^INFO: https://www.voidtools.com/forum/viewtopic.php?p=17390#p17390

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()
}

UserProfile := EnvGet("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
#HotIf WinActive("ahk_class WorkerW") or WinActive("ahk_class Progman")
^f:: {
    RunPath := '-p "' UserProfile '\Desktop\"'
    Run(EverythingPath " " RunPath)
    if WinWait("ahk_exe everything.exe", , 2) {
        Sleep(125)
        WinActivate("ahk_exe everything.exe")
    }
}


;BLOCK 2 - TASKBARS
#HotIf WinActive("ahk_class Shell_TrayWnd") or WinActive("ahk_class Shell_SecondaryTrayWnd")
^f:: {
    Run(EverythingPath)
    if WinWait("ahk_exe everything.exe", , 2) {
        Sleep(125)
        WinActivate("ahk_exe everything.exe")
    }
}


;BLOCK 3 - EXPLORER WINDOWS and FILE PICKING DIALOGS (only for the full file picking dialog)
#HotIf 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
        try {
            crumbHWND := ControlGetHwnd("Breadcrumb Parent1", "A")
            RunPath := ControlGetText("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]
            parts := StrSplit(RunPath, ": ")
            if parts.Length >= 2 {
                RunPath := parts[2]
            } else {
                RunPath := ""
            }
        } catch {
            RunPath := ""
        }
        
        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.
            try RunPath := WinGetTitle("A")
        }
        
        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)
    if WinWait("ahk_exe everything.exe", , 2) {
        Sleep(125)
        WinActivate("ahk_exe everything.exe")
    }
}
#HotIf

;FUNCTIONS
GetUserFullName() {
    username := A_UserName
    try {
        ; 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
        }
    }
    return ""
}

;GetActiveExplorerPath by ntepa (Updated for v2)
;Works correctly in all situations except for special ::{GUID} folders (Recycle Bin, Home, Gallery)
GetActiveExplorerPath() {
    try {
        hwnd := WinActive("ahk_class CabinetWClass")
        if !hwnd
            return ""
            
        activeTab := 0
        try activeTab := ControlGetHwnd("ShellTabWindowClass1", "ahk_id " hwnd)
        
        for w in ComObject("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)
                ComCall(3, shellBrowser, "ptr*", &thisTab := 0)
                if (thisTab != activeTab)
                    continue
            }
            return w.Document.Folder.Self.Path
        }
    }
    return ""
}

@Onurtag
Copy link
Author

Onurtag commented Mar 14, 2026

Looks good to me. If your company etc. is forcing ahk 2.0 this should work as well.

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