Processing Ajax...

Title
Close Dialog

Message

Confirm
Close Dialog

Confirm
Close Dialog

Search for Window and Focus It

Description
This script will show a list of open windows that is searchable. When you select one, it will focus the window and highlight it red for 5 seconds.
Language
C#.net
Minimum Version
Created By
Keith Lammers (BFS)
Contributors
Thomas Malloch (BFS)
Date Created
Oct 4, 2019
Date Last Modified
Oct 4, 2019

Scripted Function (Macro) Code

using System;
using System.Drawing;
using System.Collections.Generic;

public static class DisplayFusionFunction
{
    public static void Run(IntPtr windowHandle)
    {
        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);
            }
        }
        
        string selectedWindow = BFS.Dialog.GetUserInputListViewWithFilter("Select the window to move...", new List<string>(windows.Keys).ToArray());
        BFS.Window.Focus(windows[selectedWindow]);
        BFS.Window.SetWindowHighlight(windows[selectedWindow], Color.Red);
        BFS.General.ThreadWait(5000);
        BFS.Window.RemoveWindowHighlight(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;
	}
}