Captura de events de mouse / teclado fora do formulário (aplicativo executado em segundo plano)

Eu tenho um aplicativo que é executado em segundo plano (minimizado / bandeja de tarefas). Eu preciso ser capaz de detectar a atividade do mouse (cliques, movimento), bem como a atividade do teclado.

Qual é a melhor maneira de fazer isso, dada a restrição de que minha janela não está “focada”?

As palavras mágicas são ganchos do windows. Eles são criados com uma chamada ap / invoke para SetWindowsHookEx . Você pode configurar um gancho para monitorar, entre outros, events de teclado e mouse. Normalmente, esses ganchos são locais para o aplicativo, mas você também pode criar ganchos globais. O KB da Microsoft mostra como.

No entanto, esteja ciente de que nem todos os tipos de ganchos globais podem ser usados ​​a partir do .NET. Em particular, há apenas dois que você pode usar: os ganchos de teclado e mouse de baixo nível , conhecidos como WH_MOUSE_LL e WH_MOUSE_LL . Felizmente, estas são exatamente o que você precisa.

Dê uma olhada nesta biblioteca http://globalmousekeyhook.codeplex.com/ . É 100% gerenciado código c # para instalar ganchos de mouse e teclado globais. Ele envolve ganchos de baixo nível em janelas comuns, formando events de teclado e mouse.