todos que puedo porque por persona para otra minutos mensajes mensaje los leido error enviados enviado eliminar despues como borro borrar borra antes c++ winapi windows-8 touch setwindowshookex

c++ - puedo - ¿Es posible eliminar mensajes táctiles(WM_POINTERDOWN, etc.) que recibe una aplicación?



porque no puedo eliminar mensajes de whatsapp para todos (1)

He instalado con éxito un gancho WH_GETMESSAGE con SetWindowsHookEx y puedo ver los WM_POINTERDOWN , WM_POINTERUP , etc. que recibe la aplicación. (Es una aplicación de escritorio de 32 bits que se ejecuta en Windows 8.1.)

Ahora, no solo quiero ver esos mensajes, sino que quiero eliminar algunos de ellos.

El documental para GetMsgProc dice:

El procedimiento de enlace GetMsgProc puede examinar o modificar el mensaje. Después de que el procedimiento de enlace devuelve el control al sistema, la función GetMessage o PeekMessage devuelve el mensaje, junto con las modificaciones, a la aplicación que originalmente lo llamó.

Con los mensajes WM_KEYUP esto parece funcionar bien. Puedo configurar el mensaje a WM_NULL en el gancho, y el evento clave desaparecerá.

Sin embargo, con los mensajes WM_POINTER... esto no parece funcionar. La aplicación aún recibe los mensajes (validados en el depurador).

¿Tal vez hay alguna otra forma de filtrar / eliminar esos mensajes?

Editar: tiene que funcionar con aplicaciones de terceros no modificadas (de ahí el uso de un enlace).

Actualización: logré evitar que los eventos de clic se toquen al llamar agresivamente a PeekMessage dentro del gancho (probablemente no sea una buena idea a largo plazo). Sin embargo, todavía no puedo evitar desplazarme por el tacto.


Solución 1:

WH_GETMESSAGE no está diseñado para eliminar o modificar mensajes, solo para supervisarlos. Desafortunadamente, la solución alternativa de Mark, que usa WH_KEYBOARD_LL y WH_MOUSE_LL , tampoco pareció resolver el problema (porque multitouch no entra en la categoría de un mensaje de mouse). Lo siento, marca!

Me gustaría señalar WH_CALLWNDPROC , que recibe los mensajes antes de su ventana prevista. Esta parece ser la forma aceptada de modificar mensajes.

Solución 2:

Es posible que la ventana de destino no se preocupe por los mensajes WM_POINTER... en absoluto. Podría detectar la entrada táctil a través de la API de entrada sin procesar , como esta demostración aquí . Intente también estar WM_INPUT mensajes WM_INPUT .

Nota 1: los mensajes de entrada sin formato se pueden eliminar, pero no se pueden modificar ni crear.

Nota 2: No estoy del todo seguro, pero los mensajes WM_INPUT no controlados pueden crear una pérdida de memoria porque es prácticamente un puntero masivo. Por las dudas, maneja los mensajes en tu procedimiento de enlace.