Processing Ajax...
Save 25% on our desktop apps during our Black Friday/Cyber Monday sale!Save 25% on our desktop apps during our Black Friday/Cyber Monday sale, including DisplayFusion, ClipboardFusion, FileSeek, LogFusion, TrayStatus, and VoiceBot!Save 25% on our desktop apps during our Black Friday/Cyber Monday sale!

Title
Close Dialog

Message

Confirm
Close Dialog

Confirm
Close Dialog

Move Window Between Left/Right Monitor Sides

Description
This function moves a window from the left side of a monitor to the right side of the monitor, or from the right side of a monitor to the left side of the next monitor while keeping the same window size.
Language
C#.net
Minimum Version
Created By
Thomas Malloch (BFS)
Contributors
-
Date Created
Sep 29, 2014
Date Last Modified
Oct 3, 2014

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;
		
		//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 next monitor, find the new monitor bounds, then move the window
		BFS.Window.MoveToNextMonitor(windowHandle);
		
		monitorRect = BFS.Monitor.GetMonitorBoundsByWindow(windowHandle);
		BFS.Window.SetLocation(windowHandle, monitorRect.X + rightSpace, windowRect.Y);
	}
}