Features:
- Sort alphabetically or by date and time.
- Lock individual shortcuts.
I've placed most of my scripts on http://www.donationcoders.com/skrommel.
Skrommel
;RecentRun.ahk ; Shows a list of the most recently run programs on the Start menu and in the tray ;Skrommel @2005 #SingleInstance,Force AutoTrim,Off BatchLines=-1 Gosub,READINI RegRead,recentmenu,HKEY_CURRENT_USER,Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,Start Menu recentmenu=%recentmenu%\%shortcutdir% FileCreateDir,%shortcutdir% Gosub,UPDATEMENUS Gosub,GETPROGRAMS LOOP: Sleep,100 oldprograms=%programs% Gosub,GETPROGRAMS If programs<>%oldprograms% { Gosub,CREATESHORTCUTS Gosub,UPDATEMENUS } Goto,LOOP GETPROGRAMS: programs= WinGet,winids,List,,,Program Manager Loop,%winids% { StringTrimRight,winid,winids%a_index%,0 WinGet,program,ProcessName,ahk_id %winid% Loop,HKEY_CURRENT_USER,Software\Microsoft\Windows\ShellNoRoam\MUICache,0,0 { IfInString,A_LoopRegName,%program% { RegRead,info path=%A_LoopRegName% programs=%programs%%program%%A_Tab%%path%%A_Tab%%info%`n Break } } } Sort,programs,U Return CREATESHORTCUTS: Loop,Parse,programs,`n { IfNotInString,oldprograms,%A_LoopField% { StringSplit,split,A_LoopField,%A_Tab% StringSplit,name,split1,`. program=%name1% path=%split2% info=%split3% StringGetPos,pos,path,@ If pos>=0 StringTrimLeft,path,path,1 StringGetPos,pos,path,`, If pos>=0 StringMid,path,path,0,%pos% StringGetPos,pos,path,`" If pos>=0 { StringTrimLeft,path,path,1 StringTrimRight,path,path,1 } StringLower,program,program,T StringRight,ext,path,3 FileGetAttrib,attributes,%shortcutdir%\%program% - %info%.lnk IfNotInString,attributes,R IfInString,extensions,%ext% FileCreateShortcut,"%path%",%shortcutdir%\%program% - %info%.lnk } } Return UPDATEMENUS: RegDelete,HKEY_CURRENT_USER,Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu\%shortcutdir%,Order FileRemoveDir,%recentmenu%,1 FileCreateDir,%recentmenu% FileDelete,%recentmenu%\*.lnk Menu,Tray,NoStandard Menu,Tray,DeleteAll Menu,Tray,Add,RecentRun,REPEATLASTRUN Menu,Tray,Add, files= Loop,%shortcutdir%\*.lnk { If sortbydate=1 files=%files%%A_LoopFileTimeModified%`t%A_LoopFileName%`n Else files=%files%%A_LoopFileName%`t%A_LoopFileName%`n } If sortbydate=1 Sort,files,R Else Sort,files counter=0 Loop,parse,files,`n { If A_LoopField= Continue StringSplit,filearray,A_LoopField,%A_Tab% FileGetShortcut,%shortcutdir%\%filearray2%,Target,Dir,,Description,Icon,IconNumber,RunState FileGetAttrib,attributes,%shortcutdir%\%filearray2% StringTrimRight,filename,filearray2,4 IfInString,attributes,R { FileCreateShortcut,%Target%,%recentmenu%\%filearray2%,%Dir%,,%Description%,%Icon%,,%IconNumber%,%RunState% Menu,Tray,Add,%filename%,RUN } Else If counter<%numberofshortcuts% { Menu,Tray,Add,%filename%,RUN counter+=1 If sortbydate=1 { FileCreateShortcut,%Target%,%recentmenu%\%counter% - %filearray2%,%Dir%,%Args%,%Description%,%Icon%,,%IconNumber%,%RunState% } Else { FileCreateShortcut,%Target%,%recentmenu%\%filearray2%,%Dir%,%Args%,%Description%,%Icon%,,%IconNumber%,%RunState% ; Menu,Tray,Add,%filename%,RUN } } } Menu,Tray,Add, Menu,Tray,Add,&Settings,SETTINGS Menu,Tray,Add,&Edit shortcuts,EDITSHORTCUTS Menu,Tray,Add,&Delete shortcuts,DELETESHORTCUTS Menu,Tray,Add,&Help,HELP Menu,Tray,Add,&Quit,QUIT Menu,Tray,Default,RecentRun Return RUN: Run,%recentmenu%\%A_ThisMenuItem%.lnk Return REPEATLASTRUN: Return EDITSHORTCUTS: Run,Explorer.exe %A_ScriptDir%\%shortcutdir% Return DELETESHORTCUTS: FileRemoveDir,%recentmenu%,1 FileCreateDir,%recentmenu% FileDelete,%recentmenu%\*.lnk FileDelete,%shortcutdir%\*.lnk Gosub,UPDATEMENUS Return SETTINGS: Gosub,READINI Run,RecentRun.ini Return HELP: help=Shows a list of the most recently run programs on the Start menu and in the tray. help=%help%`n help=%help%`nThe tray menu: help=%help%`n- Settings help=%help%`n Opens the RecentRun.ini-file. help=%help%`n Edit it to change the sort order, the number of shortcuts, help=%help%`n and the name of the Start-menu folder. help=%help%`n- Edit shortcuts help=%help%`n Opens the folder containing the shortcuts. help=%help%`n To make a shortcut permanent, write protect it. help=%help%`n Right click on the shortcut, click the last menu item, help=%help%`n click the first tab, tick the first check box, click OK. help=%help%`n- Delete shortcuts help=%help%`n Deletes the shortcut history. help=%help%`n help=%help%`nSkrommel @2005 MsgBox,0,RecentRun,%help% help= Return READINI: IfNotExist,RecentRun.ini { inifile=[Settings] inifile=%inifile%`nsortbydate=1 inifile=%inifile%`nnumberofshortcuts=30 inifile=%inifile%`nshortcutdir=Recent inifile=%inifile%`nextensions=.exe.com.cmd.bat.pif FileAppend,%inifile%,RecentRun.ini inifile= } IniRead,sortbydate,RecentRun.ini,Settings,sortbydate IniRead,numberofshortcuts,RecentRun.ini,Settings,numberofshortcuts IniRead,shortcutdir,RecentRun.ini,Settings,shortcutdir IniRead,extensions,RecentRun.ini,Settings,extensions Return QUIT: ExitApp