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?

Confirm

Are you sure?

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);
		}
	}
}