debugging = 0 debugSleep = 3 WinGet, id, list,,, Program Manager Loop, %id% { if A_Index = 1 continue winID := id%A_Index% WinGetTitle, winTitle, ahk_id %winID% debug( "Cycling window " winTitle) WinShow, ahk_id %winID% winFitsOkay := shrinkFit(winID) winPosOkay := winPosition(winID) } shrinkFit(winID) { WinGetPos, , , winW, winH, ahk_id %winID% debug( "winW:" winW "`nwinH:" winH) if (winW > A_ScreenWidth) { debug( "Window is too wide") winset, region, w%A_ScreenWidth%, ahk_id %winID% } ;WinGetPos, , , , TrayWndH, ahk_class Shell_TrayWnd if (winH > A_ScreenHeight) { debug( "Window is too high") winset, region, h%A_ScreenHeight%, ahk_id %winID% } } winPosition(winID) { WinGetPos, winX, winY, winW, winH, ahk_id %winID% if (winX < 0) { debug( "Window is to the left of screen") WinMove, ahk_id %winID%, , 0 } if (winY < 0) { debug( "Window is above screen") WinMove, ahk_id %winID%, , , 0 } if ((winX + winW) > A_ScreenWidth) { debug( "Window is to the right of screen") maxX := A_ScreenWidth - winW WinMove, ahk_id %winID%, , %maxX% } if ((winY + winH) > A_ScreenHeight) { debug( "Window is below screen") ;WinGetPos, , , , TrayWndH, ahk_class Shell_TrayWnd maxY := A_ScreenHeight - winH WinMove, ahk_id %winID%, , , %maxY% } } debug(debugText) { global debugging global debugSleep if debugging { MsgBox, , showAllWindows, %debugText%, %debugSleep% } }