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

Jan*_*ann 6 windows process

我希望能够查询某个函数并给它一个processID或processName - 然后它应该返回true或者false说该进程是否在前台.

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



对于每种类型的应用程序(.net,java/swing,纯c ++/win32-ui),这是否可行?

  • 此问题仅适用于Windows.

Mic*_*ael 8

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);
}
Run Code Online (Sandbox Code Playgroud)

这适用于在某种程度上使用核心Win32库的任何应用程序 - 这将包括Windows窗体,WPF,本机Win32应用程序等.请注意,这只适用于在调用桌面和会话上运行的应用程序 - 您可以'例如,使用它来确定另一个用户的应用程序是否在前台.

  • `if(GetWindowThreadProcessId(hwnd,&pid)`应该读取`if(GetWindowThreadProcessId(hwnd,&foregroundPid)`.实际上,你将未初始化的DWORD值与前景窗口的PID进行比较. (3认同)