Utils/ProcessTools.cs
/*
C# Source File =============================================================================== Created on: 6/13/2018 @ 6:39 PM Created by: Alcha Organization: HassleFree Solutions, LLC Filename: Tools.cs =============================================================================== Comments: Built largely with the two following links, a StackOverflow answer and a blog post: https://stackoverflow.com/a/97517 and https://vizible.wordpress.com/2009/07/11/c-how-to-get-foreground-window/ */ using System; using System.Runtime.InteropServices; namespace Alcha { public static class ProcessTools { // The GetForegroundWindow function returns a handle to the foreground window // (the window with which the user is currently working). [DllImport ("user32.dll")] static extern IntPtr GetForegroundWindow (); // The GetWindowThreadProcessId function retrieves the identifier of the thread // that created the specified window and, optionally, the identifier of the // process that created the window. [DllImport ("user32.dll")] static extern Int32 GetWindowThreadProcessId (IntPtr hWnd, out uint lpdwProcessId); // Returns the name of the process owning the foreground window. public static string GetForegroundProcessName () { IntPtr hwnd = GetForegroundWindow (); // The foreground window can be NULL in certain circumstances, // such as when a window is losing activation. if (hwnd == null) return "Unknown"; uint pid; GetWindowThreadProcessId (hwnd, out pid); foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses ()) { if (p.Id == pid) return p.ProcessName; } return "Unknown"; } } } |