如何确定进程是否是当前活动/前台应用程序

我希望能够查询一些函数,并给它一个processID或processName – 然后它应该返回truefalse这个进程是否在前台或没有。

所以,即Firefox的查询将返回true (因为现在我在FireFox中,input这个),一切都应该返回false

这是甚至可能为每种types的应用程序(.net,java / swing,纯c ++ / win32-ui)?

  • 这个问题只适用于Windows。

GetForegroundWindow和GetWindowThreadProcessId应该让你得到这个信息。

也就是说,如果你知道这个pid,只需按照如下的函数进行检查:

 bool IsForegroundProcess(DWORD pid) { HWND hwnd = GetForegroundWindow(); if (hwnd == NULL) return false; DWORD foregroundPid; if (GetWindowThreadProcessId(hwnd, &foregroundPid) == 0) return false; return (foregroundPid == pid); } 

这将适用于在某些级别使用核心Win32库的任何应用程序 – 这将包括Windows窗体,WPF,原生Win32应用程序等。注意,这只适用于在调用桌面和会话上运行的应用程序 – 您可以“例如,使用它来确定另一个用户的应用程序是否在前台。