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 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
23d ago
Date Last Modified
23d ago

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);				
		}
	}
}