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?

Visit Each Corner on Current Monitor

Description
This function will rotate the window through each corner on the monitor.
Language
C#.net
Minimum Version
Created By
William Rawls
Contributors
-
Date Created
Jan 8, 2019
Date Last Modified
Jan 8, 2019

Scripted Function (Macro) Code

using System;
using System.Drawing;

public static class DisplayFusionFunction 
{
	public static void Run(IntPtr windowHandle) 
	{
        if (windowHandle == null) return;

        Rectangle windowBounds = BFS.Window.GetBounds(windowHandle);
        if (windowBounds == null) return;

        Rectangle screenBounds = BFS.Monitor.GetMonitorWorkAreaByWindow(windowHandle);
        if (screenBounds == null) return;

        var isRestored = BFS.Window.IsRestored(windowHandle);
        if (!isRestored) BFS.Window.Restore(windowHandle);

        var rightEdgeX =  screenBounds.X + screenBounds.Width -  windowBounds.Width;
        var bottomEdgeY = screenBounds.Y + screenBounds.Height - windowBounds.Height;

        Rectangle[] locations = new Rectangle[]
        {
            new Rectangle( screenBounds.X, screenBounds.Y, windowBounds.Width, windowBounds.Height), //   0,   0
            new Rectangle( rightEdgeX,     screenBounds.Y, windowBounds.Width, windowBounds.Height), // 100,   0
            new Rectangle( rightEdgeX,     bottomEdgeY,    windowBounds.Width, windowBounds.Height), // 100, 100
            new Rectangle( screenBounds.X, bottomEdgeY,    windowBounds.Width, windowBounds.Height), //   0, 100
        }; 

		// Start with the first location and look for the first matching X and Y
		Rectangle newLocation = locations[0];
		for(int i = 0; i < locations.Length; i++)
		{
			Rectangle location = locations[i];
			if (IsCloseEnough(windowBounds, location))
			{
				if (i < locations.Length - 1)
				{
					// Set the new location to the next location.
					// If it's the last location, use the already set first location.
					newLocation = locations[i+1];
				}				
				break;
			}
		}
		
		// Move the window to the new location
		BFS.Window.SetSizeAndLocation(windowHandle, newLocation.X, newLocation.Y, windowBounds.Width, windowBounds.Height);
	}

	// Checks to see if the upper left coordinates of each rectangle 
	// is within a tolerant number of pixels
	public static bool IsCloseEnough(Rectangle a, Rectangle b)
	{
		const int TOLERANCE = 50;
		int deltaX = a.X - b.X;
		if (deltaX < 0)
			deltaX = -deltaX;

		int deltaY = a.Y - b.Y;
		if (deltaY < 0)
			deltaY = -deltaY;

		return (deltaX <= TOLERANCE) && (deltaY <= TOLERANCE);
	}
}