DeskTopControl lets you take contol of all the windows on your desktop.
Shows the icons of the running programs in a little window. Move, maximize, drag and drop files... It's not perfect, but it works.
Anyone know another way of getting a file's path other than through the registry?
Skrommel
; DeskTopControl ; ; Controls all the windows on all your display devices. ; Move, maximize, show windows info, drag and drop files to any program. DetectHiddenWindows,Off SetWindelay,0 guititle=DeskTopControl iconsize=32 winlist= command=create START: Gosub,NEWWIN GetKeyState,lbutton,LButton,P If lbutton=D Gosub,INDEX Sleep,100 Goto,START NEWWIN: winlist= WinGet,id,List,,,Program Manager Loop %id% { winlist=%winlist%%id% } If winlist<>%oldwinlist% { Gosub,CREATEGUI command=create Gosub,INDEX command=update oldwinlist=%winlist% } Return TOPMOST: WinGet,topmost,ExStyle,ahk_id %window% Transform,topmost,BitAnd,%topmost%,0x8 If topmost<>0 topmost=On Else topmost=Off Return CREATEGUI: SysGet,mon1,Monitor,1 SySGet,mon2,Monitor,2 SysGet,mon3,Monitor,3 SySGet,mon4,Monitor,4 desktopw:=mon1Right If mon2Right>%desktopw% desktopw:=mon2Right If mon3Right>%desktopw% desktopw:=mon3Right If mon4Right>%desktopw% desktopw:=mon4Right desktoph:=mon1Bottom If mon2Bottom>%desktoph% desktoph:=mon2Bottom If mon3Bottom>%desktoph% desktoph:=mon3Bottom If mon4Bottom>%desktoph% desktoph:=mon4Bottom If command=create { SysGet,titlebarh,4 SysGet,borderh,33 guiw:=desktopw/10 guih:=desktoph/10 SysGet,work,MonitorWorkArea guix:=workRight-guiw-borderh guiy:=workBottom-guih-borderh-titlebarh+4 } Else WinGetPos,guix,guiy,,,%guititle% Gui,Destroy Gui,+AlwaysOnTop -Resize +ToolWindow Gui,Show,x%guix% y%guiy% h%guih% w%guiw% NA,%guititle% Return INDEX: windowlist= WinGet,id,List,,,Program Manager Loop,%id% { StringTrimRight,window,id%A_Index%,0 WinGetTitle,title,ahk_id %window% If title<>%guititle% If title<> { iconid=icon%A_Index% Gosub,GETPOS Gosub,READICON If command=create Gosub,ADDICON Gosub,DRAWICON Gosub,MOVEICON Gosub,SETINFO } } Return GETPOS: WinGetPos,winx,winy,winw,winh,ahk_id %window% x:=winx/10 y:=winy/10 w:=winw h:=winh if x<0 x:=0 snap:=guiw-iconsize if x>%snap% x:=snap if Y<0 y:=0 snap:=guih-iconsize if y>%snap% y:=snap Return SETINFO: %iconid%window:=window %iconid%info :=info %iconid%file :=file %iconid%path :=path %iconid%title :=title %iconid%x :=x %iconid%y :=y %iconid%w :=w %iconid%h :=h Return GETINFO: window:=%iconid%window info :=%iconid%info file :=%iconid%file path :=%iconid%path title :=%iconid%title x :=%iconid%x y :=%iconid%y w :=%iconid%w h :=%iconid%h Return ADDICON: Gui,Add,Pic,v%iconid% gMOVE Return DRAWICON: GuiControl,,%iconid%,*w%iconsize% *h-1 %path% Return MoVEICON: GuiControl,Move,%iconid%,x%x% y%y% Return READICON: WinGet,file,ProcessName,ahk_id %window% Loop,HKEY_CURRENT_USER,Software\Microsoft\Windows\ShellNoRoam\MUICache,0,0 { IfInString,A_LoopRegName,%file% { RegRead,info path=%A_LoopRegName% Break } } Return MOVE: iconid:=A_GuiControl Gosub,GETINFO Gosub,TOPMOST If A_GuiControlEvent=DoubleClick { WinGet,max,MinMax,ahk_id %window% If max=0 WinMaximize,ahk_id %window% Else WinRestore,ahk_id %window% Gosub,GETPOS Gosub,MOVEICON Return } WinSet,AlwaysOnTop,On,ahk_id %window% WinSet,AlwaysOnTop,On,%guititle% MouseGetPos,mx0,my0 GuiControlGet,iconpos,Pos,%iconid% offx:=mx0-iconposx offy:=my0-iconposy moved=0 MOVING: MouseGetPos,mx,my If moved=0 { If mx<>%mx0% moved=1 If my<>%my0% moved=1 } If moved=1 { x:=mx-offx y:=my-offy Gosub,MOVEICON winx:=x*10 winy:=y*10 WinMove,ahk_id %window%,,%winx%,%winy% } ToolTip,%info% - %path% - %title% - x%winx%:y%winy% - t:%topmost% GetKeyState,lbutton,LButton,P If lbutton=U { WinSet,AlwaysOnTop,%topmost%,ahk_id %window% WinActivate,ahk_id %window% If moved<>0 { Gosub,GETPOS Gosub,MOVEICON Gosub,SETINFO } ToolTip Return } Goto,MOVING GUICLOSE: ExitApp GUIDROPFILES: Loop,parse,A_GuiControlEvent,`n { Run,%path% %A_LoopField% ToolTip,%path% %A_LoopField% Sleep,1000 } ToolTip Return