Processing Ajax...

Title
Close Dialog

Message

Confirm
Close Dialog

Confirm
Close Dialog

Move Window to Opposite Side of Previous Monitor

Description
This script will move a window to the opposite side of the monitor to the left of the monitor it's currently on. For example, if it's currently on the left side of your right monitor, this script will move it to the right side of your left monitor.
Language
C#.net
Minimum Version
Created By
Thomas Malloch (BFS)
Contributors
-
Date Created
Jul 25, 2016
Date Last Modified
Jul 25, 2016

Scripted Function (Macro) Code

using System;
using System.Drawing;

// The 'windowHandle' parameter will contain the window handle for the:
//   - Active window when run by hotkey
//   - Window Location target when run by a Window Location rule
//   - TitleBar Button owner when run by a TitleBar Button
//   - Jump List owner when run from a Taskbar Jump List
//   - Currently focused window if none of these match
public static class DisplayFusionFunction
{
	public static void Run(IntPtr windowHandle)
	{		
		//if we failed to get the focused window, exit the function
		if (windowHandle == IntPtr.Zero)
			return;

		//move it to the next monitor
		BFS.Window.MoveToPreviousMonitor(windowHandle);
		
		//get the bounds for the window, and the monitor it's in
		Rectangle windowRect = BFS.Window.GetBounds(windowHandle);
		Rectangle monitorRect = BFS.Monitor.GetMonitorBoundsByWindow(windowHandle);
		
		//find the space on either side of the window
		int leftSpace =  windowRect.X - monitorRect.X;
		int rightSpace = monitorRect.Width - (windowRect.X - monitorRect.X) - windowRect.Width;
		
		//if the leftspace is smaller, it is on the left side of monitor.
		//move it to the right
		if (leftSpace < rightSpace)
		{
			BFS.Window.SetLocation(windowHandle, monitorRect.X + monitorRect.Width - leftSpace - windowRect.Width, windowRect.Y);
			return;
		}
		
		//if we got this far, window is on the right. move it to the left side
		monitorRect = BFS.Monitor.GetMonitorBoundsByWindow(windowHandle);
		BFS.Window.SetLocation(windowHandle, monitorRect.X + rightSpace, windowRect.Y);
	}
}