2009-05-09 9 views
10

Quiero interceptar mensajes que se envían a una ventana en un proceso diferente. ¿Cuál es la mejor manera de hacer esto? No puedo ver los mensajes cuando uso el enlace WH_GETMESSAGE, y no estoy seguro de si puedo subclase en los procesos. Cualquier ayuda sería muy apreciada.¿Cómo puedo interceptar los mensajes que se envían a una ventana?

+0

Usted tendrá que establecer un sistema de gran enlace de mensaje. [Aquí hay un tutorial] (http://www.codeguru.com/cpp/w-p/system/misc/article.php/c5685). –

Respuesta

11

Debe insertar su propio código en el proceso que posee las ventanas desde donde desea interceptar los mensajes. Afortunadamente, SetWindowsHookEx() hace que esto sea bastante fácil, aunque es posible que tenga problemas al principio si solo lo ha usado para el proceso de conexión hasta ahora.

puedo recomendar dos excelentes artículos sobre el tema:

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

Si el mensaje se envía en lugar de publicado WH_GETMESSAGE no lo verá. Necesita WH_CALLWNDPROC. Si está trabajando en procesos, necesitará un enlace de todo el sistema en una DLL. No menciona cómo invocó SetWindowsHookEx, por lo que no sé si el enganche falló porque no era global, o porque el mensaje que estaba buscando era enviado.

Si no ha trabajado anteriormente con ganchos para todo el sistema, tengo un ejemplo de un gancho para todo el sistema en mi sitio web here. Es un gancho de teclado, pero el principio es el mismo.

Deténgase si hablo sin querer aquí: su pregunta fue tan breve que no puedo inferir su nivel de experiencia. Pero perder el tiempo con los ganchos implica implicar algo de experiencia ...

+1

Lo siento, debería haber proporcionado más detalles. Obtuve WH_CALLWNDPROC para leer los mensajes, pero ¿cómo puedo eliminar el mensaje de la cola con eso? Quiero evitar que algunos mensajes lleguen a la ventana de destino. –

+0

Luego no pase el mensaje a CallNextHookEx –

+0

No importa si llamo a CallNextHookEx o no, el mensaje siempre llega a la ventana de destino. :( –

Cuestiones relacionadas