Question

Est-ce que j'utilise ceci:

SetWindowsHookEx(WH_CALLWNDPROC, ...);

Je peux voir les messages que je veux traiter, mais je veux empêcher ces derniers d’atteindre la fenêtre cible. J'ai donc essayé ceci:

SetWindowsHookEx(WH_GETMESSAGE, ...);

Dans ce cas, je peux modifier le message et empêcher la fenêtre cible de le traiter, mais ce hook ne voit pas les messages que je dois traiter. Je présume que c'est parce qu'il est posté dans la file d'attente de la fenêtre cible, pas envoyé? Y a-t-il un moyen de contourner ce problème? J'ai entendu dire que le sous-classement de fenêtre pourrait peut-être y parvenir, mais puis-je sous-classer une fenêtre dans un processus différent? Y a-t-il un moyen de faire cela en utilisant des crochets?

Était-ce utile?

La solution

Vous ne pouvez pas sous-classer une fenêtre dans un autre processus, mais la DLL de hook doit pouvoir sous-classer la fenêtre qui vous intéresse. Les hooks WH_GETMESSAGE et WH_CALLWNDPROC s'exécutent dans le contexte du processus recevant le message. pointez un " dans " pour sous-classer la fenêtre de la cible.

Autres conseils

Vous pouvez essayer de sous-classer la cible. fenêtre puis filtrez les messages.

La documentation de hook suggère que cela ne peut pas être fait mais je suppose que cette stratégie pourrait fonctionner: utilisez SetWindowsHookEx (WH_CALLWNDPROC, ...)

Dans la procédure, modifiez simplement le message que vous souhaitez supprimer en lui attribuant une valeur WM_ non utilisée.

LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
   CWPSTRUCT *C=(CWPSTRUCT *)lParam;

   if ( ...we are interested in this one) {
     ..deal with this message here...
     //Modify the message so that the client will ignore it
     C->message=WM_USER+44; //presumably ignored by client
   }       
   return GetNextHook(...);
}

Nasty mais facile?

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