2010-11-19 63 views
2

Comment puis-je récupérer des messages pour toutes les fenêtres à partir d'une place centrale dans mon application (winforms). J'ai besoin d'une place centrale dans mon application (par exemple programm.cs ou mainform) qui peut réagir à chaque création ou alterner chaque affichage (WM_FORMSHOW 0x18) d'un formulaire. Les formulaires sont copntribués par d'autres développeurs, AddIns, mais ils sont activés dans le domaine d'application par défaut. Bien que l'activation dans un autre domaine soit également un cas intéressant.Comment surveiller de manière centralisée les messages envoyés à l'application ou à la forme winform

l'environnement est .Net 3.5 ou 4 et C#.

merci

Répondre

1

Vous pouvez fenêtres piège messages en créant un IMessageFilter, et l'ajouter à l'application via Application.AddMessageFilter.

, vous implémentez PreFilterMessage, où vous pouvez chercher tout ce que vous voulez à l'intérieur de votre IMessageFilter classe d'implémentation - il est passé un Message qui contient les mêmes données une fenêtre de style C boucle de message obtiendrait. Notez que vous pouvez également ajouter un IMessageFilter à un formulaire spécifique si vous le souhaitez, comme toute la boucle de message d'application.

+0

En utilisant Application.AddMessageFilter tous les messages ne semblent pas être disponibles, en particulier pas "WM_SHOWWINDOW 0x0018" – wolle

+0

J'ai accès à WM_SHOWWINDOW 0x0018 en remplaçant WndProc (message de référence m). Mais ceci est une méthode de la forme et me donne accès au message seulement s'il est manipulé par ce formulaire. Malheureusement, les formulaires font partie des addins, et je n'ai aucun accès à leur code, pour remplacer cette méthode – wolle