Como determinar se um processo é o aplicativo atualmente ativo / primeiro plano

votos
4

Eu gostaria de ser capaz de consultar alguma função e dar-lhe um processID ou processName - Em seguida, ele deve retornar trueou falseem wether que o processo está em primeiro plano ou não.

Então, isto é, a consulta para o Firefox voltaria true(porque agora eu estou no FireFox, escrevendo isso) e tudo o mais deve retornar false.



Isso é mesmo possível para cada tipo de aplicação (.net, java / swing, pura c ++ / win32-ui)?

  • Esta questão é apenas para o Windows.
Publicado 19/05/2009 em 19:10
fonte usuário
Em outras línguas...                            


1 respostas

votos
6

GetForegroundWindow e GetWindowThreadProcessId deve deixá-lo obter essa informação.

ou seja, se você sabe o PID apenas verificar se contra uma função como esta:

bool IsForegroundProcess(DWORD pid)
{
   HWND hwnd = GetForegroundWindow();
   if (hwnd == NULL) return false;

   DWORD foregroundPid;
   if (GetWindowThreadProcessId(hwnd, &foregroundPid) == 0) return false;

   return (foregroundPid == pid);
}

Isto irá funcionar para qualquer aplicativo que usa o núcleo biblioteca Win32 em algum nível - isto vai incluir Windows Forms, WPF, aplicativos nativos do Win32, etc. Nota isso só vai funcionar para aplicativos em execução na área de trabalho chamado e sessão - você pode' t usar isso para determinar se a aplicação de outro usuário está em primeiro plano, por exemplo.

Respondeu 19/05/2009 em 19:16
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more