.NET / Win32 - evento para detectar quando uma janela pertencente a outro aplicativo obtém o foco

Eu tenho um aplicativo .NET que precisa ser capaz de detectar quando uma janela específica fica e perde o foco. A janela específica em que estou interessado pertence a outro aplicativo sobre o qual não tenho controle, embora eu tenha o identificador de janela.

Estou realmente procurando a melhor maneira de resolver isso. Até agora, vejo duas possibilidades:

Usar uma chamada do Win32 em um timer para monitorar qualquer alteração no estado. Não é ótimo, pois corre o risco de perder alterações de estado, por exemplo se a janela se tornar ativa, então inativa dentro do intervalo do timerUsando ganchos (SetWindowsHookEx) para interceptar as mensagens na janela. Parece que deveria funcionar, mas preocupado com o fato de que a) ganchos em nível global não funcionariam a partir do código .NET, portanto, seria nativo eb) isso poderia ser considerado uma atividade do tipo vírus / keylogger, bloqueada pelo sistema operacional?

Tenho certeza de que há outras opções também, se assim for, eu adoraria ouvi-la

questionAnswers(1)

yourAnswerToTheQuestion