It is easy to mimic the auto-hide behavior of the taskbar. When the mouse cursor is at a specified region on the edge of the screen, for about 1 second, a menu pops up. It is controlled by a slow running timer (4 times a second – without any measurable processor load). Different actions are performed at different regions, like with mouse gestures, but w/o the need for pressing any button or keyboard key.
In the script below two easy examples are provided: at the top of the screen a list of programs is shown, which can also contain documents or Internet shortcuts. Clicking on one, or pressing the Up/Down arrow keys and Enter, runs the associated program. Clicking outside of the menu or pressing Esc cancels.
The other example is more interesting. A menu pops up on the left edge of the screen, showing a list of document types I often work with. The bottommost entry is CleanUp, which checks the entries in the Windows Recent Documents list, end deletes the broken shortcuts (linking to files not there any more). There are also menu items for deleting a link, or showing all links pointing to recently used documents, and selecting one opens it with its default application.
This menu also contains items named by often used file extensions, like DOC, TXT. Activating one of them pops up another menu, with the files of this type, referenced in the Windows Recent Documents folder. Activating one starts a specified application with the selected file.
There are many possible extensions. For example, the list of programs, the boundaries of the regions could be read from an ini file, dynamically updated.
Version 1.2
Code:
#Persistent
CoordMode Mouse, Screen
CoordMode Menu, Screen
Recent = %HOME%\Recent ; = %USERPROFILE%\Recent
XX := 0 "," 190 "," A_ScreenWidth -185 "," A_ScreenWidth -2 "," 9999
StringSplit XX, XX, `, ; Region boundaries
YY := 0 "," 190 "," A_ScreenHeight-185 "," A_ScreenHeight-2 "," 9999
StringSplit YY, YY, `,
Loop 5 ; MenuXY <- desired menu.
Menu1%A_Index% = LeftMenu ; 11 21 31 41 51 Left 1Y
Loop 5 ; 12 22 32 42 52 Right 5Y
Menu%A_Index%1 = TopMenu ; : .... : Top X1
; 15 25 35 45 55 Botm X5
Menu TopMenu, Add, WinWord, RUN
Menu TopMenu, Add, NotePad, RUN
Menu TopMenu, Add, CMD, RUN
Menu TopMenu, Add, Calc, RUN
Menu TopMenu, Add, www.autohotkey.com, RUN
; ... further menu items
; EDIT BELOW: ,FileType>Application Path
Types= AHK>C:\Program Files\Multi-Edit 9.10\Mew32.exe
,DOC>C:\Program Files\Microsoft Office\OFFICE11\WinWord.exe
,MHT>C:\Program Files\Internet Explorer\IEXPLORE.EXE
,PDF>C:\Program Files\Adobe\Acrobat 6.0\Acrobat\Acrobat.exe
,PPT>C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.EXE
,RTF>C:\Program Files\Microsoft Office\OFFICE11\WinWord.exe
,TXT>C:\WINDOWS\NOTEPAD.EXE
,XLS>C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE
Menu LeftMenu,Add,[recent],LeftAgain ; Item1 = title
Menu LeftMenu,Add ; Separator
Loop Parse, Types, `,
{
StringSplit t, A_LoopField, >
Menu LeftMenu, Add, %t1%, ShowRecent
App%t1% = %t2% ; Setup AppXXX vars for fast call
}
Menu LeftMenu,Add ; Separator
Menu LeftMenu,Add,ShowAll>, ShowAll ; After extensions, other menu items
Menu LeftMenu,Add,DelLink>, DelLink
Menu LeftMenu,Add,CleanUp>, CleanUp
; ... further menu items
Menu DocMenu, Add ; Dummy entry for 1st DeleteAll
Pcount = 1
SetTimer Edge, 250
Return
Edge:
MouseGetPos X, Y
P0 = %Pos% ; Previous mouse position
Loop 5
If (X <= XX%A_Index%) {
Pos = %A_Index% ; X region
Break
}
Loop 5
If (Y <= YY%A_Index%) {
Pos = %Pos%%A_Index% ; Position = XregionYregion
Break
}
Pcount := Pcount*(P0=Pos) + 1 ; How long in this region
If (Pcount <> 4 or Menu%Pos% = "")
Return
Menu % Menu%Pos%, Show
Return
RUN:
Run %A_ThisMenuItem%
Return
LeftAgain: ; No real selection: re-show menu
Menu leftMenu, Show, %X%, %Y%
Return
DelLink:
Action = DeleteLink
Goto Show
ShowAll:
Action = RunLink
Show:
Menu DocMenu, DeleteAll
Loop %Recent%\*.lnk
{
StringTrimRight file,A_LoopFileName,4 ; remove .lnk
Menu DocMenu, Add, %file%, %Action%
}
Menu DocMenu, Show, 0 ; Show still on the left
Return
RunLink: ; Run default application with document
FileGetShortcut %Recent%\%A_ThisMenuItem%.lnk, file
Run "%file%"
Return
DeleteLink: ; Delete selected link
FileGetShortcut %Recent%\%A_ThisMenuItem%.lnk, file
MsgBox 4,,Delete Shortcut to`n%file%
IfMsgBox Yes
FileDelete %Recent%\%A_ThisMenuItem%.lnk
GoTo LeftAgain ; Re-show Left menu
ShowRecent:
Menu DocMenu, DeleteAll
type = %A_ThisMenuItem% ; Used in Open:
Loop %Recent%\*.%type%.lnk
{
StringTrimRight file,A_LoopFileName,4 ; remove .lnk
Menu DocMenu, Add, %file%, Open
}
Menu DocMenu, Show, 0 ; Show still on the left
Return
Open: ; Open linked file
FileGetShortcut %Recent%\%A_ThisMenuItem%.lnk, file
Run % App%type% " """ file """"
Return
CleanUp: ; Remove broken links
Loop %Recent%\*.lnk
{
FileGetShortcut %A_LoopFileFullPath%, file
If !FileExist(file) {
ToolTip Deleting %A_LoopFileFullPath%
FileDelete %A_LoopFileFullPath%
Sleep 100
}
ToolTip ; Remove last tooltip
}
Return
Edit 20060320: Single place for changes
Edit 20060320:
- Added "ShowAll" to Recent Documents menu, which shows all the links, and opens the selected document with its default application.
- Added "DelLink" to Recent Documents menu, which shows all the links. Selecting one removes the shortcut to the selected document.
- Defined 25 regions, where the mouse cursor is detected, 12 are on the edges of the screen. If the mouse is there for 4 timer periods (1…1.25 second), the menu pops up with the name MenuXY, with X and Y = 1…5. 1 corresponds the left/top edge, 5 corresponds to the right/bottom edge of the screen. The numbers in between denote left/mid/right or top/mid/low regions.
- The boundaries between the regions are defined in the strings assigned initially to XX and YY. They contain 5 numbers separated by commas, starting with 0, ending with a large number.