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?

Move all except specific windows to monitor 2

Description
This script will move all windows except for ones with specific text in their window titles. You can set the exclusions on line 26.
Language
C#.net
Minimum Version
Created By
SOUP
Contributors
-
Date Created
Nov 4, 2022
Date Last Modified
Nov 4, 2022

Scripted Function (Macro) Code

using System;
using System.Drawing;
using System.Diagnostics;

// 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)
	{
		//enumerate window handles from monitor 1
		foreach(IntPtr handle in BFS.Window.GetVisibleWindowHandlesByMonitor(1))
		{
			//get the window's appId
			uint appId = BFS.Application.GetAppIDByWindow(handle);
			
			//get the process that the window belongs to
			Process process = Process.GetProcessById((int)appId);
			
			//if the process is something we want on that monitor,
			//continue to the next window handle
			if(process.ProcessName.ToLower().Contains("teams") || process.ProcessName.ToLower().Contains("outlook") || process.ProcessName.ToLower().Contains("aws"))
				continue;
				
			//if we got this far, this window handle is unwanted.
			//move it to another monitor
			BFS.Window.MoveToMonitor(2, handle);				
		}
	}
}