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

时间:2009-05-19 18:10:42

标签: windows process

我希望能够查询某个函数并为其提供processID或processName - 然后它应该返回truefalse,而该进程是否在前台。

因此,Firefox的查询将返回true(因为现在我在FireFox中,键入此内容),其他所有内容都应返回false



对于每种类型的应用程序(.net,java / swing,纯c ++ / win32-ui)都可以实现吗?

  • 此问题仅适用于Windows。

1 个答案:

答案 0 :(得分:6)

GetForegroundWindowGetWindowThreadProcessId可让您获取此信息。

即,如果您知道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应用程序等。请注意,这只适用于在调用桌面和会话上运行的应用程序 - 例如,你不能用它来确定另一个用户的应用程序是否在前台。