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