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

发布于 2024-07-22 02:33:54 字数 334 浏览 3 评论 0原文

我希望能够查询某个函数并给它一个 processID 或 processName - 然后无论该进程是否在前台,它都应该返回 truefalse

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



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

  • 这个问题仅适用于 Windows。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

压抑⊿情绪 2024-07-29 02:33:54

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 应用程序等。请注意这一点仅适用于在调用桌面和会话上运行的应用程序 - 例如,您无法使用它来确定另一个用户的应用程序是否位于前台。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文