Pregunta

¿Estoy usando esto:

SetWindowsHookEx(WH_CALLWNDPROC, ...);

Puedo ver los mensajes que quiero procesar, pero quiero evitar que lleguen a la ventana de destino. Así que probé esto:

SetWindowsHookEx(WH_GETMESSAGE, ...);

Cuando hago esto, puedo modificar el mensaje y evitar que la ventana de destino lo procese, pero este enlace no ve los mensajes que necesito procesar. Supongo que esto se debe a que se está publicando en la cola de la ventana de destino, ¿no se ha enviado? ¿Hay alguna forma de evitar este problema? He oído que la subclasificación de ventanas podría lograr esto, pero ¿puedo subclasificar una ventana en un proceso diferente? ¿Hay alguna manera de hacer esto usando ganchos?

¿Fue útil?

Solución

No puede subclasificar una ventana en otro proceso, pero la DLL de enlace debería poder subclasificar la ventana que le interesa. Los enlaces WH_GETMESSAGE y WH_CALLWNDPROC se ejecutan en el contexto del proceso que recibe el mensaje, así que en ese momento señala que tiene un " en " para subclasificar la ventana del objetivo.

Otros consejos

Puede intentar subclasificar el objetivo ventana y luego filtrar los mensajes.

La documentación del gancho sugiere que esto no se puede hacer, pero supongo que esta estrategia podría funcionar: use SetWindowsHookEx (WH_CALLWNDPROC, ...)

En el procedimiento simplemente modifique el mensaje que desea tirar a un valor WM_ no utilizado.

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(...);
}

¿Desagradable pero fácil?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top