Processing Ajax...

Title
Close Dialog

Message

Confirm
Close Dialog

Confirm
Close Dialog

A recent AVG and Avast antivirus update is preventing DisplayFusion 9.9 from launching on some systems.
If you're running into this issue, please update to the latest DisplayFusion 10.0 Beta.

Move all off-screen windows to the current monitor

Description
This script will move all windows that aren't on the current monitor, to the current monitor.
Language
C#.net
Minimum Version
Created By
Christian Treffler
Contributors
-
Date Created
Sep 13, 2021
Date Last Modified
Sep 13, 2021

Scripted Function (Macro) Code

using System;
using System.Drawing;

public static class DisplayFusionFunction
{
	public static void Run(IntPtr windowHandle)
	{
        Rectangle MonRect = BFS.Monitor.GetMonitorBoundsByMouseCursor();

        // Loop through the visible windows and move them to the monitor that has the mouse cursor, if they are not on any monitor
        foreach (IntPtr handle in BFS.Window.GetVisibleWindowHandles())
        {
			Rectangle WinRect = BFS.Window.GetBounds(handle);
			bool moveit = false; 
			uint monitorid = BFS.Monitor.GetMonitorIDByWindow(handle);
			if(monitorid == 0)	// Not on any monitor
			{
				moveit = true;
			}
			else
			{
				Rectangle IntersectSize = Rectangle.Intersect(WinRect, BFS.Monitor.GetMonitorBoundsByID(monitorid));
				if (IntersectSize.Width < 3 || IntersectSize.Height < 3) // Has a monitor, but barely visible
				{
					moveit = true;
				}
			}
			
			if(moveit)
			{
				BFS.DisplayFusion.RunFunctionWithWindowHandle("Move Window to Current Monitor", handle);
				BFS.Window.MoveToCentreMonitor(handle);
				BFS.Window.SetSize(handle, WinRect.Width, WinRect.Height);
			}
        }   
	}
}