2009-10-19 7 views
1

Je souhaite recevoir une notification de l'utilisation active de tous les programmes.Alternatives aux crochets de fenêtres en C#?

Pour ce faire via des hooks Windows j'utiliserais une DLL C++ non managée qui parle à C#. Il y a un article qui explique ce processus here.

Je me demandais cependant s'il y avait une alternative à l'utilisation des crochets du système.

+0

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

Répondre

1

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.

2

Je n'ai pas examiné tous les détails de cette bibliothèque, mais cela pourrait peut-être vous aider.

Managed Windows API