我希望能够查询某个函数并为其提供processID或processName - 然后它应该返回true
或false
,而该进程是否在前台。
因此,Firefox的查询将返回true
(因为现在我在FireFox中,键入此内容),其他所有内容都应返回false
。
对于每种类型的应用程序(.net,java / swing,纯c ++ / win32-ui)都可以实现吗?
答案 0 :(得分:6)
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应用程序等。请注意,这只适用于在调用桌面和会话上运行的应用程序 - 例如,你不能用它来确定另一个用户的应用程序是否在前台。