Processing Ajax...

Title

Message

Confirm

Confirm

Confirm

Confirm

Are you sure you want to delete this item?

Confirm

Are you sure you want to delete this item?

Move a Window Between Monitors and Splits

Description
This function moves a window into a target monitor. If the target monitor is a split monitor, running this function several times will move the window between the splits.
Language
C#.net
Minimum Version
Created By
Thomas Malloch (BFS)
Contributors
-
Date Created
Feb 3, 2015
Date Last Modified
Feb 3, 2015

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)
	{
		//set the target monitor a monitor of your choosing.
		//if it is a split monitor, set it to the first split's ID
		uint targetMonitor = 101;
		
		//check to see what monitor the window is currently in
		uint monitor = BFS.Monitor.GetMonitorIDByWindow(windowHandle);
		
		//check to see if we moving into a split monitor
		if(targetMonitor > 100)
		{
			//if we aren't anywhere near the monitor, move it in
			if(targetMonitor / 100 != monitor / 100)
			{
				BFS.Window.MoveToMonitor(targetMonitor, windowHandle);
				return;
			}
			else
			{
				//we are in the split monitor. check to see if the next split exists
				Rectangle monitorBounds = BFS.Monitor.GetMonitorBoundsByID(++monitor);
				
				//if it doesnt exist, move it into the first split
				if(monitorBounds.Width == 0 || monitorBounds.Height == 0)
				{
					//strip the last two digits off the monitor, add them back
					//and add one for the first split
					BFS.Window.MoveToMonitor(monitor / 100 * 100 + 1, windowHandle);
					return;
				}
					
				//if it does exist, move to the next split
				BFS.Window.MoveToMonitor(monitor, windowHandle);
			}
		}
		else
		{
			//if the window isn't in the current monitor, move it in
			if(monitor != targetMonitor)
				BFS.Window.MoveToMonitor(targetMonitor, windowHandle);
		}
	}
}