|  | ; Easy Access to Currently Opened Folders | 
        
          |  | ; Original author: Savage | 
        
          |  | ; Fork by Leeroy | 
        
          |  | ; Invoke a menu of currently opened folders when you click | 
        
          |  | ; the middle mouse button inside Open / Save as dialogs or | 
        
          |  | ; Console (command prompt) windows. Select one of these | 
        
          |  | ; locations and the script will navigate there. | 
        
          |  |  | 
        
          |  | ; CONFIG: CHOOSE A DIFFERENT HOTKEY | 
        
          |  | ; You could also use a modified mouse button (such as ^MButton) or | 
        
          |  | ; a keyboard hotkey. In the case of MButton, the tilde (~) prefix | 
        
          |  | ; is used so that MButton's normal functionality is not lost when | 
        
          |  | ; you click in other window types, such as a browser. | 
        
          |  |  | 
        
          |  | ; Middle-click like original script by Savage | 
        
          |  | f_Hotkey = ~MButton | 
        
          |  | ; Ctrl+G like in Listary | 
        
          |  | f_HotkeyCombo = ~^g | 
        
          |  |  | 
        
          |  | ; END OF CONFIGURATION SECTION | 
        
          |  | ; Do not make changes below this point unless you want to change | 
        
          |  | ; the basic functionality of the script. | 
        
          |  |  | 
        
          |  | #SingleInstance, force ; Needed since the hotkey is dynamically created. | 
        
          |  |  | 
        
          |  | ; Auto-execute section. | 
        
          |  | Hotkey, %f_Hotkey%, f_DisplayMenu | 
        
          |  | Hotkey, %f_HotkeyCombo%, f_DisplayMenu | 
        
          |  | return | 
        
          |  |  | 
        
          |  |  | 
        
          |  | ; Navigate to the chosen path | 
        
          |  | f_Navigate: | 
        
          |  | ; Set destination path to be the selected menu item | 
        
          |  | f_path = %A_ThisMenuItem% | 
        
          |  |  | 
        
          |  | if f_path = | 
        
          |  | return | 
        
          |  |  | 
        
          |  | if f_class = #32770 ; It's a dialog. | 
        
          |  | { | 
        
          |  | ; Activate the window so that if the user is middle-clicking | 
        
          |  | ; outside the dialog, subsequent clicks will also work: | 
        
          |  | WinActivate ahk_id %f_window_id% | 
        
          |  | ; Alt+D to convert Address bar from breadcrumbs to editbox | 
        
          |  | Send !{d} | 
        
          |  | ; Wait for focus | 
        
          |  | Sleep 50 | 
        
          |  | ; The control that's focused after Alt+D is thus the address bar | 
        
          |  | ControlGetFocus, addressbar, a | 
        
          |  | ; Put in the chosen path | 
        
          |  | ControlSetText %addressbar%, % f_path, a | 
        
          |  | ; Go there | 
        
          |  | ControlSend %addressbar%, {Enter}, a | 
        
          |  | ; Return focus to filename field | 
        
          |  | ControlFocus Edit1, a | 
        
          |  | return | 
        
          |  | } | 
        
          |  | ; In a console window, pushd to that directory | 
        
          |  | else if f_class = ConsoleWindowClass | 
        
          |  | { | 
        
          |  | ; Because sometimes the mclick deactivates it. | 
        
          |  | WinActivate, ahk_id %f_window_id% | 
        
          |  | ; This will be in effect only for the duration of this thread. | 
        
          |  | SetKeyDelay, 0 | 
        
          |  | ; Clear existing text from prompt and send pushd command | 
        
          |  | Send, {Esc}pushd %f_path%{Enter} | 
        
          |  | return | 
        
          |  | } | 
        
          |  | return | 
        
          |  |  | 
        
          |  |  | 
        
          |  | RemoveToolTip: | 
        
          |  | SetTimer, RemoveToolTip, Off | 
        
          |  | ToolTip | 
        
          |  | return | 
        
          |  |  | 
        
          |  | ; Display the menu | 
        
          |  | f_DisplayMenu: | 
        
          |  | ; Get active window identifiers for use in f_Navigate | 
        
          |  | WinGet, f_window_id, ID, a | 
        
          |  | WinGetClass, f_class, a | 
        
          |  | ; Don't display menu unless it's a dialog or console window | 
        
          |  | if f_class not in #32770,ConsoleWindowClass | 
        
          |  | return | 
        
          |  | ; Otherwise, put together the menu | 
        
          |  | GetCurrentPaths() { | 
        
          |  | For pwb in ComObjCreate("Shell.Application").Windows | 
        
          |  | ; Exclude special locations like Computer, Recycle Bin, Search Results | 
        
          |  | If InStr(pwb.FullName, "explorer.exe") && InStr(pwb.LocationURL, "file:///") | 
        
          |  | { | 
        
          |  | ; Get paths of currently opened Explorer windows | 
        
          |  | Menu, CurrentLocations, Add, % pwb.document.folder.self.path, f_Navigate | 
        
          |  | ; Same default folder icon for all | 
        
          |  | Menu, CurrentLocations, Icon, % pwb.document.folder.self.path, %A_WinDir%\system32\imageres.dll, 4 | 
        
          |  | } | 
        
          |  | } | 
        
          |  | ; Get current paths and build menu with them | 
        
          |  | GetCurrentPaths() | 
        
          |  | ; Don't halt the show if there are no paths and the menu is empty | 
        
          |  | Menu, CurrentLocations, UseErrorLevel | 
        
          |  | ; Present the menu | 
        
          |  | Menu, CurrentLocations, Show | 
        
          |  | ; If it doesn't exist show reassuring tooltip | 
        
          |  | If ErrorLevel | 
        
          |  | { | 
        
          |  | ; Oh! Look at that taskbar. It's empty. | 
        
          |  | ToolTip, No folders open | 
        
          |  | SetTimer, RemoveToolTip, 1000 | 
        
          |  | } | 
        
          |  | ; Destroy the menu so it doesn't remember previously opened windows | 
        
          |  | Menu, CurrentLocations, Delete | 
        
          |  | return |