Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to determine if an process is the currently active / foreground application

I'd like to be able to query some function and give it a processID or processName - It then should return true or false on wether that process is in the foreground or not.

So i.e. the query for Firefox would return true (because right now I'm in FireFox, typing this) and everything else should return false.



Is that even possible for every type of application (.net, java/swing, pure c++/win32-ui)?

  • This question is for Windows only.
like image 862
Jan Gressmann Avatar asked May 19 '09 18:05

Jan Gressmann


1 Answers

GetForegroundWindow and GetWindowThreadProcessId should let you get this information.

i.e., if you know the pid just check it against a function like this:

bool IsForegroundProcess(DWORD pid)
{
   HWND hwnd = GetForegroundWindow();
   if (hwnd == NULL) return false;

   DWORD foregroundPid;
   if (GetWindowThreadProcessId(hwnd, &foregroundPid) == 0) return false;

   return (foregroundPid == pid);
}

This will work for any application that uses the core Win32 library at some level - this'll include Windows Forms, WPF, native Win32 applications, etc. Note this'll only work for applications running on the calling desktop and session - you can't use this to determine if another user's application is in the foreground, for instance.

like image 112
Michael Avatar answered Oct 04 '22 15:10

Michael