Processing Ajax...

Title
Close Dialog

Message

Confirm
Close Dialog

Confirm
Close Dialog

Better Win+Left

Description
This function behaves much like the built-in Win+Left hotkey, but skips the step where the window is not snapped to either side of the monitor.
Language
C#.net
Minimum Version
Created By
Bruce Wahler, Thomas Malloch (BFS)
Contributors
-
Date Created
May 5, 2015
Date Last Modified
Mar 15, 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)
	{	
		//check to see if there was an error, if there was, exit function
		if (windowHandle == IntPtr.Zero)
			return;

		//get the position of the window in the monitor, and the current monitor
		Rectangle windowRect = BFS.Window.GetBounds(windowHandle);
		Rectangle monitorRect = BFS.Monitor.GetMonitorBoundsByWindow(windowHandle);

		//if the window is maximized, move it to the left half of the monitor
		if(BFS.Window.IsMaximized(windowHandle))
		{
			BFS.Window.MoveToLeftMonitorHalf(windowHandle);
			return;
		}

		//if the top-left corner of the window is at the far left, but the window is
		// more than 50% of the monitor width, just set it back to 50%
		if ((windowRect.X == monitorRect.X) && (windowRect.Width > (monitorRect.Width / 2)))
		{
			BFS.Window.MoveToLeftMonitorHalf(windowHandle);
			return;
		}

		//if the top-left corner of the window is further right than the top-left corner
		// of the monitor, move it to the left half of the monitor
		if (windowRect.X > monitorRect.X)
		{
			BFS.Window.MoveToLeftMonitorHalf(windowHandle);
			return;
		}

		//if we got this far then the window is on the left	
		//move the window to the previous monitor
		BFS.Window.MoveToPreviousMonitor(windowHandle);

		//move the window to the right side
		BFS.Window.MoveToRightMonitorHalf(windowHandle);
	}
}