C++ n'est pas nécessaire de fixer un crochet de fenêtres global, il vous suffit d'appeler le nécessaire winapis. Un hook global serait plus efficace et plus fiable que l'interrogation, en supposant que vous vous intéressiez seulement aux applications qui ont une fenêtre associée au processus. Par exemple, une invite CMD ne peut pas générer d'événements GWH.
Finalement, le mécanisme le plus fiable et le plus efficace serait une injection à l'échelle du système, un bon début serait la bibliothèque Detours de Microsoft Research. Le livre classique de "Advanced Windows Programming" de Jefffrey Richter a couvert cela en détail, offrant 3 mécanismes pour l'injection (y compris comment mettre en place un crochet pour l'ensemble du système). Encore une fois, cela ne nécessite pas C++, et ne vous dira pas nécessairement quand une application était en cours d'utilisation. En fin de compte, l'accrochage global des fenêtres va être le plus logique.
Il n'y a pas de bibliothèques .NET intégrées qui le faire et, finalement, vous aurez à interagir avec le code non géré. Le mieux que vous puissiez faire est d'utiliser une bibliothèque qui cache ces détails. – BobbyShaftoe