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 Forms, WPF, собственные приложения Win32 и т. Д. Обратите внимание, что это будет работать только для приложений, работающих на вызывающем рабочем столе и сеансе - Вы не можете использовать это, чтобы определить, находится ли приложение другого пользователя на переднем плане, например.