using System;
using System.Drawing;
using System.Collections.Generic;
using System.Runtime.InteropServices;
// 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)
{
//find the appid of the focused window
uint focusedAppId = BFS.Application.GetAppIDByWindow(windowHandle);
//Avoiding problems if GetMonitorCountEnabledNoSplits returns a negative value
if (BFS.Monitor.GetMonitorCountEnabledNoSplits() >= 0)
{
uint numberOfMonitors = (uint)BFS.Monitor.GetMonitorCountEnabledNoSplits();
//The monitor where the window which invoked the operation is located
uint invokingWindowMonitor = BFS.Monitor.GetMonitorIDByWindow(windowHandle);
//The monitor which is next of invokingWindowMonitor
uint nextMonitor = invokingWindowMonitor + 1;
if (nextMonitor > numberOfMonitors)
{
nextMonitor = 1;
}
//loop through all visible windows.
foreach(IntPtr window in BFS.Window.GetAllWindowHandles())
{
//if the window belongs to that appid, move it to the next monitor
if(BFS.Application.GetAppIDByWindow(window) == focusedAppId)
{
if (BFS.Monitor.GetMonitorIDByWindow(window) != nextMonitor)
{
BFS.Window.MoveToMonitor(nextMonitor, window);
}
}
}
}
}
}