C #: Detectando qual aplicativo tem foco

Eu estou olhando para criar um aplicativo c # que altera o conteúdo de acordo com qual aplicativo atualmente tem foco. Então, se o usuário estiver usando o Firefox, meu aplicativo saberia disso. O mesmo para o Chrome, Visual Studio, TweetDeck etc.

Isso é possível e, em caso afirmativo, como eu poderia alcançá-lo?

Tenho a sensação de que estou pedindo muito – mas vale a pena tentar.

Muito obrigado antecipadamente.

Dê uma olhada no Application.AddMessageFilter e procure por mensagens WM_ACTIVATEAPP, que informam quando um aplicativo é ativado, ou seja, recebe o foco.

Isso pode ser feito no .NET puro usando a estrutura de automação que faz parte do WPF. Adicione referências a UIAutomationClient e UIAutomationTypes e use Automation.AddAutomationFocusChangedEventHandler , por exemplo:

 public class FocusMonitor { public FocusMonitor() { AutomationFocusChangedEventHandler focusHandler = OnFocusChanged; Automation.AddAutomationFocusChangedEventHandler(focusHandler); } private void OnFocusChanged(object sender, AutomationFocusChangedEventArgs e) { AutomationElement focusedElement = sender as AutomationElement; if (focusedElement != null) { int processId = focusedElement.Current.ProcessId; using (Process process = Process.GetProcessById(processId)) { Debug.WriteLine(process.ProcessName); } } } } 

Grrr Como é frequentemente o caminho, passei algum tempo pesquisando antes de postar essa pergunta.

Depois que finalmente postei a pergunta, minha próxima pesquisa no Google revelou a resposta.

Eu ainda tenho que testá-lo, mas parece que GetForegroundWindow() é a chave.

Em vez de eu rewrite o que já está escrito, aqui está um link para a página que forneceu as informações:

http://www.csharphelp.com/2006/08/get-current-window-handle-and-caption-with-windows-api-in-c/

Desculpas para o tempo de qualquer pessoa que desperdicei ao pedir uma resposta do Googable (?).