J'ai utilisé le code fourni dans l'article suivant CodeProject dans le passé avec succès, mais il semble ne fonctionner que partiellement sur Vista/7 (je devine que l'UAC) . Cela fonctionne pour le thread en cours, mais ne prend pas en compte l'activité du système. J'ai essayé d'ajouter requireAdministrator dans les manifestes et de signer à la fois les assemblées non gérées et gérées, et cela ne semble pas aider.système large crochet Shell de .NET à l'aide Unmanaged DLL
Using Window Messages to Implement Global System Hooks in C#
Mon principal objectif est d'utiliser SetWindowsHookEx pour attraper les messages HSHELL_WINDOWCREATED et HSHELL_WINDOWDESTROYED dans l'assemblage non géré et notifier l'application C# pour qu'il puisse utiliser l'information en temps réel. Il a juste besoin de savoir à chaque fois qu'une fenêtre est créée ou détruite dans le système. J'ai également trouvé un exemple d'application pure en C/C++ qui marche très bien dans Vista/7, mais je ne veux vraiment pas avoir à écrire toute l'application en C/C++ car je préfère C#.
System Wide Hook Example that Works
Quelqu'un sait comment fixer le code dans le premier article CodeProject pour que cela fonctionne sur Vista/7 ainsi? Ou avez d'autres exemples de façons que je peux faire cela sans créer de minuteries et de hacks similaires en C#?
Merci, Marc
Je ne connaissais pas l'existence de RegisterShellHookWindow dans User32 ... qui rend les choses beaucoup plus facile. Merci de partager cela! J'ai appris quelque chose de nouveau après tout. :) Je vais jouer avec un soir peu et si je peux le faire fonctionner, alors je vais vous donner le crédit de réponse. Merci encore. – Lusid