c++ - Est-il possible de supprimer les messages tactiles(WM_POINTERDOWN etc.) qu'une application reçoit?



winapi windows-8 (1)

Solution 1:

WH_GETMESSAGE n'est pas conçu pour supprimer ou modifier des messages, uniquement pour les surveiller. Malheureusement, la solution alternative de mark - utilisant WH_KEYBOARD_LL et WH_MOUSE_LL - ne semblait pas non plus résoudre le problème (parce que le multitouch ne fait pas partie de la catégorie d'un message de souris). Désolé, marque!

Je voudrais signaler WH_CALLWNDPROC , qui reçoit des messages avant leur fenêtre prévue. Cela semble être la façon acceptée de modifier les messages.

Solution 2:

Il est possible que la fenêtre cible ne se soucie pas du WM_POINTER... messages WM_POINTER... ! Il pourrait détecter la saisie tactile via l'API Raw Input , comme cette démo ici . Essayez également de garder un œil sur les messages WM_INPUT .

Remarque 1: Les messages Raw Input peuvent être supprimés, mais ne peuvent pas être modifiés ou créés.

Note 2: Je ne suis pas tout à fait sûr, mais les messages WM_INPUT non WM_INPUT pourraient créer une fuite de mémoire parce que la chose est pratiquement un pointeur massif. Juste au cas où, manipulez les messages dans votre procédure de crochet.

https://ffff65535.com

J'ai réussi à installer un hook WH_GETMESSAGE avec SetWindowsHookEx et je peux voir les WM_POINTERDOWN , WM_POINTERUP etc. que l'application reçoit. (Il s'agit d'une application de bureau 32 bits fonctionnant sous Windows 8.1.)

Maintenant, je ne veux pas seulement voir ces messages, mais je veux en supprimer certains.

La documentation pour GetMsgProc dit:

La procédure de connexion GetMsgProc peut examiner ou modifier le message. Après que la procédure de raccordement a renvoyé le contrôle au système, la fonction GetMessage ou PeekMessage renvoie le message, avec toutes les modifications, à l'application qui l'a appelé à l'origine.

Avec les messages WM_KEYUP cela semble fonctionner WM_KEYUP . Je peux placer le message à WM_NULL dans le crochet, et l'événement principal disparaîtra.

Avec les messages WM_POINTER... cependant, cela ne semble pas fonctionner. L'application reçoit toujours les messages (validés dans le débogueur).

Peut-être qu'il existe un autre moyen de filtrer / supprimer ces messages?

Edit: Il doit fonctionner avec des applications tierces non modifiées (d'où l'utilisation d'un hook).

Mise à jour: J'ai réussi à empêcher les événements de clic de toucher en appelant agressivement PeekMessage dans le crochet (probablement pas une bonne idée à long terme). Cependant, je ne peux toujours pas empêcher le défilement au toucher.