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 (50% width)

Description
This function sizes a window to 50% width, 100% height, and swaps it between the left and right side of the monitor each time it's run.
Language
C#.net
Minimum Version
Created By
Keith Lammers (BFS)
Contributors
Thomas Malloch (BFS)
Date Created
Jan 9, 2019
Date Last Modified
Jan 9, 2019

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.GetMonitorWorkAreaByWindow(windowHandle);
		
		// Set the new 50% width, 100% height values
		int newWindowWidth = monitorRect.Width / 2;
		int newWindowHeight = monitorRect.Height;
		
		// 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.SetSizeAndLocation(windowHandle, (monitorRect.X + (monitorRect.Width / 2)), monitorRect.Y, newWindowWidth, newWindowHeight);
			return;
		}
		
		// If we got this far, window is on the right
		// Move it to the left
        BFS.Window.SetSizeAndLocation(windowHandle, monitorRect.X, monitorRect.Y, newWindowWidth, newWindowHeight);
	}
}