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