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