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?

Minimize/Restore All Windows

Description
This script will minimize all open windows when run the first time, and will restore all open windows when run the second time.
Language
C#.net
Minimum Version
Created By
Thomas Malloch (BFS)
Contributors
-
Date Created
Jan 6, 2015
Date Last Modified
3d ago

Scripted Function (Macro) Code

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

// 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
{
	//an enum to set the script state
	private enum ScriptState
	{
		Normal = 0,
Minimized = 1
	}

	public static void Run(IntPtr windowHandle)
	{
		//constants to set and get the window state property
		const string windowStateProperty = "MinimizeAndRestoreWindows_WindowState";

		//random values to use as property values
		const int normalState = 432985;
		const int maximizedState = 347561;

		//if the script is in it's minimized state, restore the saved window positions
		if (IsScriptInMinimizeState())
		{
			//loop over every window
			foreach (IntPtr window in BFS.Window.GetAllWindowHandles())
			{
				// Skip DisplayFusion windows and hidden explorer windows
				if(IsDisplayFusionWindowOrHiddenExplorerWindow(window))
					continue;
				
				//check for a saved property
				IntPtr windowState = BFS.Window.GetWindowProperty(window, windowStateProperty);

				//if we couldnt find a property, continue to the next window
				if (windowState == IntPtr.Zero)
					continue ;

				//if the window was in a normal state, restore it
				if (windowState.ToInt64() == normalState)
					BFS.Window.Restore(window);

				//if the window was in a maximized state, maximize it
				if (windowState.ToInt64() == maximizedState)
					BFS.Window.Maximize(window);

				//remove the property from the window
				BFS.Window.RemoveWindowProperty(window, windowStateProperty);
			}

			//reset the script state
			SetScriptState(ScriptState.Normal);

			//exit the script
			return;
		}

		//if we got to this point we should save all of the windows, then minimize them
		//loop through all of the visiable windows, save their state, then minimize then
		foreach (IntPtr window in BFS.Window.GetVisibleWindowHandles())
		{
			// Skip DisplayFusion windows and hidden explorer windows
			if(IsDisplayFusionWindowOrHiddenExplorerWindow(window))
				continue;
			
			if (BFS.Window.IsMaximized(window))
				BFS.Window.SetWindowProperty(window, windowStateProperty, new IntPtr(maximizedState));

			if (BFS.Window.IsRestored(window))
				BFS.Window.SetWindowProperty(window, windowStateProperty, new IntPtr(normalState));

			BFS.Window.Minimize(window);
		}

		//set the script state to minimized
		SetScriptState(ScriptState.Minimized);
	}

	//this function quickly checks to see whether we need to restore previously minimized windows
	private static bool IsScriptInMinimizeState()
	{
		//read the setting value
		string state = BFS.ScriptSettings.ReadValue("Minimize and Restore Windows State");

		//return the saved state. if no state saved, return false
		return (state.Length != 0) && (state.Equals("minimized"));
	}

	//this function saves the script state
	private static void SetScriptState(ScriptState state)
	{
		//save the state
		BFS.ScriptSettings.WriteValue("Minimize and Restore Windows State", (state == ScriptState.Normal) ? "normal" : "minimized");
	}
	
	private static bool IsDisplayFusionWindowOrHiddenExplorerWindow(IntPtr window)
	{
        // Ignore any DisplayFusion windows (title bar buttons, etc.)
        // Ignore pesky hidden explorer.exe windows
        string windowClass = BFS.Window.GetClass(window);
        if((windowClass.StartsWith("DF", StringComparison.OrdinalIgnoreCase)) ||
            (windowClass.Equals("EdgeUiInputTopWndClass", StringComparison.OrdinalIgnoreCase)) ||
            (windowClass.Equals("EdgeUiInputWndClass", StringComparison.OrdinalIgnoreCase)) ||
            (windowClass.Equals("NativeHWNDHost", StringComparison.OrdinalIgnoreCase)) ||
            (windowClass.Equals("ModeInputWnd", StringComparison.OrdinalIgnoreCase)) ||
            (windowClass.Equals("MetroGhostWindow", StringComparison.OrdinalIgnoreCase)) ||
            (windowClass.Equals("ImmersiveLauncher", StringComparison.OrdinalIgnoreCase)) ||
            (windowClass.Equals("ApplicationManager_ImmersiveShellWindow", StringComparison.OrdinalIgnoreCase)) ||
            (windowClass.Equals("Shell_TrayWnd", StringComparison.OrdinalIgnoreCase)) ||
            (windowClass.Equals("WorkerW", StringComparison.OrdinalIgnoreCase)) ||
            (windowClass.Equals("Progman", StringComparison.OrdinalIgnoreCase)) ||
            (windowClass.Equals("SearchPane", StringComparison.OrdinalIgnoreCase)))
        {
            return true;
        }
        
        return false;
	}
}