| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | using System;using System.Collections.Generic;using System.Diagnostics;using System.Runtime.InteropServices;using System.Text;using HWND = System.IntPtr;namespace InABox.WPF{    /// <summary>Contains functionality to get all the open windows.</summary>    public static class OpenWindowGetter    {        [DllImport("USER32.DLL")]        private static extern bool EnumWindows(EnumWindowsProc enumFunc, int lParam);        [DllImport("USER32.DLL")]        private static extern int GetWindowText(HWND hWnd, StringBuilder lpString, int nMaxCount);        [DllImport("USER32.DLL")]        private static extern int GetWindowTextLength(HWND hWnd);        [DllImport("USER32.DLL")]        private static extern bool IsWindowVisible(HWND hWnd);        [DllImport("USER32.DLL")]        private static extern IntPtr GetShellWindow();        [DllImport("user32.dll")]        private static extern IntPtr GetForegroundWindow();        [DllImport("user32")]        private static extern uint GetWindowThreadProcessId(HWND hWnd, out int lpdwProcessId);        /// <summary>Returns a dictionary that contains the handle and title of all the open windows.</summary>        /// <returns>A dictionary that contains the handle and title of all the open windows.</returns>        public static IDictionary<HWND, string> GetOpenWindows()        {            var shellWindow = GetShellWindow();            var windows = new Dictionary<HWND, string>();            EnumWindows(delegate(HWND hWnd, int lParam)            {                if (hWnd == shellWindow) return true;                if (!IsWindowVisible(hWnd)) return true;                var length = GetWindowTextLength(hWnd);                if (length == 0) return true;                var builder = new StringBuilder(length);                GetWindowText(hWnd, builder, length + 1);                windows[hWnd] = builder.ToString();                return true;            }, 0);            return windows;        }        public static string GetActiveWindowTitle()        {            const int nChars = 256;            var Buff = new StringBuilder(nChars);            var handle = GetForegroundWindow();            if (GetWindowText(handle, Buff, nChars) > 0) return Buff.ToString();            return null;        }        public static string GetActiveWindowProcess()        {            var handle = GetForegroundWindow();            GetWindowThreadProcessId(handle, out var pid);            var p = Process.GetProcessById(pid);            return p?.ProcessName;        }        private delegate bool EnumWindowsProc(HWND hWnd, int lParam);    }}
 |