Как определить, является ли процесс текущим активным / приоритетным приложением - PullRequest
4 голосов
/ 19 мая 2009

Я бы хотел иметь возможность запросить некоторую функцию и присвоить ей processID или processName - тогда он должен возвращать true или false, если процесс находится на первом плане или нет.

То есть запрос для Firefox вернет true (потому что сейчас я в FireFox, набираю это), а все остальное должно вернуть false.



Возможно ли это для любого типа приложения (.net, java / swing, чистый c ++ / win32-ui)?

  • Этот вопрос только для Windows.

1 Ответ

8 голосов
/ 19 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...