Question

Je fais une barre des tâches et je dois savoir quand la fenêtre active est modifiée. Je ne veux pas utiliser une minuterie. Je pense que peut-être il y a un message WndProc je peux intercepter.

J'utilise C #

Était-ce utile?

La solution

Cela nécessite un ensemble de crochet par SetWindowsHookEx, WH_SHELL. Le rappel reçoit des notifications comme HSHELL_WINDOWACTIVATED et HSHELL_WINDOWCREATED afin que vous puissiez savoir ce qui se passe avec les fenêtres de niveau supérieur. Consultez l'article SDK pour « ShellProc "pour la liste complète des notifications que vous pouvez obtenir. À peu près tous d'entre eux sont pertinents pour mettre en œuvre votre propre barre des tâches.

C'était les bonnes nouvelles. Les mauvaises nouvelles sont que WH_SHELL est un crochet global. Il exige une DLL qui peut être injecté dans un autre processus. Le problème est, vous ne pouvez pas écrire que DLL dans le code managé. Code managé dans l'injection d'un processus non géré est impossible.

Retour à nouveau de bonnes nouvelles, quelqu'un a résolu ce problème et a créé une DLL non géré qui est injectable et peut interop avec code managé. Le projet est ici . Aucune idée comment il est bon. Je pense qu'il pourrait ne pas être tout à fait la preuve UAC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top