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?

Search for Window and Move it to Current Monitor

Description
This script will show a list of open windows that is searchable. When you select one, it will move it to the current monitor.
Language
C#.net
Minimum Version
Created By
Keith Lammers (BFS)
Contributors
-
Date Created
May 15, 2020
Date Last Modified
May 15, 2020

Scripted Function (Macro) Code

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