#singleinstance force #notrayicon hw_tray := DllCall( "FindWindowEx", "uint",0, "uint",0, "str","Shell_TrayWnd", "uint",0 ) ;draw gui gui, margin,4,0 gui, -caption CreateMenu("Macromedia","pics/macromedia.png","xm" ,"Flash" ,"pics/flash.bmp" ,"flash" ,"Dreamweaver" ,"pics/dreamweaver.bmp" ,"dreamweaver" ,"Fireworks" ,"pics/fireworks.bmp" ,"fireworks" ,"Contribute" ,"pics/contribute.bmp" ,"contribute" ,"FlashPaper" ,"pics/flashpaper.bmp" ,"flashpaper") CreateMenu("Office","pics/office.png","ym" ,"Word" ,"pics/word.bmp" ,"winword" ,"Excel" ,"pics/excel.bmp" ,"excel" ,"PowerPoint" ,"pics/powerpoint.bmp" ,"powerpnt" ,"Access" ,"pics/access.bmp" ,"msaccess") CreateMenu("AHK","pics/autohotkey.gif","w24 h24 ym" ,"AutoHotkey",0,"http://www.autohotkey.com" ,"AHK_Forum",0,"http://www.autohotkey.com/forum" ,"AHK_net",0,"http://www.autohotkey.net") CreateMenu("Google","pics/google.png","ym" ,"GoogleEarth" ,"pics/googlearth.bmp" ,"C:\Program Files\Google\Google Earth\googleearth.exe" ,"GoogleDesktop" ,"pics/googledesk.bmp" ,"C:\Program Files\Google\Google Desktop Search\googledesktop.exe" ,"GoogleTalk" ,"pics/googletalk.bmp" ,"C:\Program Files\Google\Google Talk\googletalk.exe" ,"GoogleSketchUp" ,"pics/googlesketch.bmp" ,"C:\Program Files\Google\Google SketchUp\sketchup.exe") gui, show, x0 y30 gui, +lastfound gosub,Dock2TaskBar return PicClick: Menu, %A_GuiControl%_Menu, show return MenuClick: Run % %A_ThisMenuItem% return CreateMenu(menuname,menupic,placement ,item1 ,item1pic ,run1 ,item2=0,item2pic=0,run2=0 ,item3=0,item3pic=0,run3=0 ,item4=0,item4pic=0,run4=0 ,item5=0,item5pic=0,run5=0 ,item6=0,item6pic=0,run6=0 ,item7=0,item7pic=0,run7=0 ,item8=0,item8pic=0,run8=0) { global Gui, add, pic, v%menuname% gPicClick %placement%, %menupic% Loop, { if item%A_index% { item := item%A_index% Menu,%menuname%_Menu,add,%Item%,MenuClick if item%A_index%pic { pic := item%A_index%pic Menu_AssignBitmap( menuname "_Menu",A_index,pic,true) } %item% := run%a_index% } else break } } Dock2TaskBar: ; Active window to be docked to the taskbar, NEEDS hw_tray value Process Exist ; PID -> ErrorLevel WinGet hw_gui, ID, ahk_pid %ErrorLevel% DllCall( "SetParent", "uint", hw_gui, "uint", hw_tray ) Return Menu_AssignBitmap( p_menu, p_item, p_bm_unchecked, p_unchecked_face=false, p_bm_checked=false, p_checked_face=false ) { static h_menuDummy if h_menuDummy= { Menu, menuDummy, Add Menu, menuDummy, DeleteAll Gui, 99:Menu, menuDummy Gui, 99:Show, Hide, guiDummy old_DetectHiddenWindows := A_DetectHiddenWindows DetectHiddenWindows, on Process, Exist h_menuDummy := DllCall( "GetMenu", "uint", WinExist( "guiDummy ahk_class AutoHotkeyGUI ahk_pid " ErrorLevel ) ) if ReportError( ErrorLevel or h_menuDummy = 0, "Menu_AssignBitmap: GetMenu", "h_menuDummy = " h_menuDummy ) return, false DetectHiddenWindows, %old_DetectHiddenWindows% Gui, 99:Menu Gui, 99:Destroy } Menu, menuDummy, Add, :%p_menu% h_menu := DllCall( "GetSubMenu", "uint", h_menuDummy, "int", 0 ) if ReportError( ErrorLevel or h_menu = 0, "Menu_AssignBitmap: GetSubMenu", "h_menu = " h_menu ) return, false success := DllCall( "RemoveMenu", "uint", h_menuDummy, "uint", 0, "uint", 0x400 ) if ReportError( ErrorLevel or ! success, "Menu_AssignBitmap: RemoveMenu", "success = " success ) return, false Menu, menuDummy, Delete, :%p_menu% if ( p_bm_unchecked ) { hbm_unchecked := DllCall( "LoadImage" , "uint", 0 , "str", p_bm_unchecked , "uint", 0 ; IMAGE_BITMAP , "int", 0 , "int", 0 , "uint", 0x10|( 0x20*p_unchecked_face ) ) ; LR_LOADFROMFILE|LR_LOADTRANSPARENT if ReportError( ErrorLevel or ! hbm_unchecked, "Menu_AssignBitmap: LoadImage: unchecked", "hbm_unchecked = " hbm_unchecked ) return, false } if ( p_bm_checked ) { hbm_checked := DllCall( "LoadImage" , "uint", 0 , "str", p_bm_checked , "uint", 0 , "int", 0 , "int", 0 , "uint", 0x10|( 0x20*p_checked_face ) ) if ReportError( ErrorLevel or ! hbm_checked, "Menu_AssignBitmap: LoadImage: checked", "hbm_checked = " hbm_checked ) return, false } success := DllCall( "SetMenuItemBitmaps" , "uint", h_menu , "uint", p_item-1 , "uint", 0x400 ; MF_BYPOSITION , "uint", hbm_unchecked , "uint", hbm_checked ) if ReportError( ErrorLevel or ! success, "Menu_AssignBitmap: SetMenuItemBitmaps", "success = " success ) return, false return, true } ReportError( p_condition, p_title, p_extra ) { if p_condition MsgBox, ( LTrim [Error] %p_title% EL = %ErrorLevel%, LE = %A_LastError% %p_extra% ) return, p_condition }