
Do you have mulitple monitors, a projector or other display devices?
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
Code:
; 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