2009-05-09 7 views
10

Je souhaite intercepter les messages qui sont envoyés à une fenêtre dans un processus différent. Quelle est la meilleure façon de procéder? Je ne peux pas voir les messages lorsque j'utilise le hook WH_GETMESSAGE, et je ne suis pas sûr de pouvoir sous-classer les processus? Toute aide serait très appréciée.Comment intercepter des messages envoyés à une fenêtre?

+0

Vous aurez besoin de mettre un système de crochet large message. [Voici un tutoriel] (http://www.codeguru.com/cpp/w-p/system/misc/article.php/c5685). –

Répondre

11

Vous devez injecter votre propre code dans le processus qui possède les fenêtres dont vous souhaitez intercepter les messages. Heureusement, SetWindowsHookEx() rend cela assez facile, bien que vous ayez peut-être un peu de mal au début si vous ne l'avez utilisé que pour le hooking en cours.

Je peux recommander deux excellents articles sur le sujet:

  1. de Joseph Newcomber Hooks and DLLs
  2. Robert Kuster Three Ways to Inject Your Code into Another Process
7

Si le message est envoyé plutôt que posté WH_GETMESSAGE ne le verra pas. Vous avez besoin de WH_CALLWNDPROC. Si vous travaillez à travers des processus, vous aurez besoin d'un crochet à l'échelle du système dans une DLL. Vous ne mentionnez pas comment vous avez appelé SetWindowsHookEx, donc je ne sais pas si votre hook a échoué parce que ce n'était pas global, ou parce que le message que vous cherchiez était envoyé.

Si vous n'avez jamais travaillé avec des crochets sur l'ensemble du système, j'ai un exemple de crochet pour l'ensemble du système sur mon site Web here. C'est un crochet de clavier, mais le principe est le même. Arrêtez-moi si je parle involontairement ici - votre question était si courte que je ne peux pas déduire votre niveau d'expertise. Mais déconner avec des crochets implique une certaine expérience ...

+1

Désolé, j'aurais dû fournir plus de détails. J'ai obtenu WH_CALLWNDPROC pour lire les messages, mais comment puis-je supprimer le message de la file d'attente en utilisant cela? Je veux empêcher certains messages d'atteindre la fenêtre cible. –

+0

Ensuite, ne passez pas le message à CallNextHookEx –

+0

Peu importe que j'appelle CallNextHookEx ou non, le message atteint toujours la fenêtre cible. :( –

Questions connexes