Fix Offscreen Windows (Mac)

I change screen resolutions on my Mac frequently — adding or removing external monitors, using external monitors of different sizes… Every once in a while a window is placed off screen or is too large to be resized within the screen available.

Here’s a script to fix that…

Launch the Apple Script Editor, and create a new script. Enter the following in the script…

-- Example list of processes to ignore: {"xGestures"} or {"xGestures", "OtherApp", ...}
property processesToIgnore : {"GeekTool"}

-- Get the size of the Display(s), only useful if there is one display
-- otherwise it will grab the total size of both displays
tell application "Finder"
	set _b to bounds of window of desktop
	set screen_width to item 3 of _b
	set screen_height to item 4 of _b
end tell

tell application "System Events"
	set allProcesses to application processes
	set _results to ""
	repeat with i from 1 to count allProcesses
		set doIt to 1
		repeat with z from 1 to count processesToIgnore
			if process i = process (item z of processesToIgnore) then
				set doIt to 0
			end if
		end repeat
		
		if doIt = 1 then
			tell process i
				repeat with x from 1 to (count windows)
					set winPos to position of window x
					set _x to item 1 of winPos
					set _y to item 2 of winPos
					set winPos to size of window x
					set _width to item 1 of winPos
					set _height to item 2 of winPos
					
					if (_x < 0 or _y < 0 or _x > screen_width or _y > screen_height) then
						set position of window x to {0, 22}
					end if
					if (_width > screen_width or _height > screen_height) then
						set size of window x to {screen_width - 100, screen_height - 100}
					end if
				end repeat
				
			end tell
		end if
	end repeat
end tell

Save the file, and then export as an application. Do File –> Save As, and change the File Format to be Application. Once completed, you now have an executable (double-clickable) program that will run the script.

Note that I got this code from somewhere like this, modified slightly for my use.

It’s also worth mentioning that someone else has already fixed this problem with a free app named Forget-Me-Not.

Published

1 comment

Comments are closed.