using System;
using System.Drawing;
using System.Collections.Generic;
public static class DisplayFusionFunction
{
public static void Run(IntPtr windowHandle)
{
// Get the current monitor based on the mouse position
int mouseX = BFS.Input.GetMousePositionX();
int mouseY = BFS.Input.GetMousePositionY();
uint currentMonitorID = BFS.Monitor.GetMonitorIDByXY(mouseX, mouseY);
// Get a list of open windows for all monitors
Dictionary<string, IntPtr> windows = new Dictionary<string, IntPtr>();
foreach (IntPtr window in BFS.Window.GetVisibleAndMinimizedWindowHandles())
{
if (IsDisplayFusionWindowOrHiddenExplorerWindow(window))
continue;
string title = BFS.Window.GetText(window);
if(string.IsNullOrEmpty(title))
continue;
if(windows.ContainsKey(title))
{
int i;
for(i = 1; windows.ContainsKey(title + "(" + i + ")") ; i++)
{
}
windows.Add(title + "(" + i + ")", window);
}
else
{
windows.Add(title, window);
}
}
// Show a dialog allowing the user to select the window
string selectedWindow = BFS.Dialog.GetUserInputListViewWithFilter("Select the window to move...", new List<string>(windows.Keys).ToArray());
// Move the window to the current monitor
BFS.Window.MoveToMonitor(currentMonitorID, windows[selectedWindow]);
}
private static bool IsDisplayFusionWindowOrHiddenExplorerWindow(IntPtr window)
{
//ignore any DisplayFusion windows (title bar buttons, etc.)
//ignore pesky hidden explorer.exe windows
if((BFS.Window.GetClass(window).StartsWith("DF", StringComparison.OrdinalIgnoreCase)) ||
(BFS.Window.GetClass(window).Equals("EdgeUiInputTopWndClass", StringComparison.OrdinalIgnoreCase)) ||
(BFS.Window.GetClass(window).Equals("EdgeUiInputWndClass", StringComparison.OrdinalIgnoreCase)) ||
(BFS.Window.GetClass(window).Equals("NativeHWNDHost", StringComparison.OrdinalIgnoreCase)) ||
(BFS.Window.GetClass(window).Equals("ModeInputWnd", StringComparison.OrdinalIgnoreCase)) ||
(BFS.Window.GetClass(window).Equals("MetroGhostWindow", StringComparison.OrdinalIgnoreCase)) ||
(BFS.Window.GetClass(window).Equals("ImmersiveLauncher", StringComparison.OrdinalIgnoreCase)) ||
(BFS.Window.GetClass(window).Equals("ApplicationManager_ImmersiveShellWindow", StringComparison.OrdinalIgnoreCase)) ||
(BFS.Window.GetClass(window).Equals("Shell_TrayWnd", StringComparison.OrdinalIgnoreCase)) ||
(BFS.Window.GetClass(window).Equals("WorkerW", StringComparison.OrdinalIgnoreCase)) ||
(BFS.Window.GetClass(window).Equals("Progman", StringComparison.OrdinalIgnoreCase)) ||
(BFS.Window.GetClass(window).Equals("SearchPane", StringComparison.OrdinalIgnoreCase)))
{
return true;
}
return false;
}
}