是否可以删除应用程序收到的触摸消息(WM_POINTERDOWN等)?

时间:2014-01-12 00:15:47

标签: c++ winapi windows-8 touch setwindowshookex

我已成功安装了WH_GETMESSAGESetWindowsHookEx的挂钩,我可以看到应用程序收到的WM_POINTERDOWNWM_POINTERUP等消息。 (它是在Windows 8.1上运行的32位桌面应用程序。)

现在,我不仅希望看到这些消息,而且我想删除其中一些消息。

GetMsgProc的文件说明:

  

GetMsgProc挂钩程序可以检查或修改消息。在钩子过程将控制权返回给系统之后,GetMessage或PeekMessage函数将消息以及任何修改返回给最初调用它的应用程序。

使用WM_KEYUP消息,这似乎工作正常。我可以在挂钩中将消息设置为WM_NULL,并且键事件将消失。

但是,使用WM_POINTER...消息,这似乎不起作用。应用程序仍然接收消息(在调试器中验证)。

也许有其他方法来过滤/删除此类消息?

编辑:它必须使用未经修改的第三方应用程序(因此使用挂钩)。

更新:我设法通过在钩子内积极调用PeekMessage来阻止点击事件(从长远来看可能不是一个好主意)。但是,我仍然无法阻止通过触摸滚动。

1 个答案:

答案 0 :(得分:2)

解决方案1:

WH_GETMESSAGE并非旨在删除或修改邮件,而只是为了监控邮件。不幸的是,标记的备用解决方案 - 使用WH_KEYBOARD_LLWH_MOUSE_LL - 似乎也没有解决问题(因为多点触控不属于鼠标消息的类别)。对不起,马克!

我想指出WH_CALLWNDPROC,它在预期窗口之前接收消息。这似乎是修改消息的可接受方式。

解决方案2:

目标窗口可能根本不关心WM_POINTER...消息!它可以通过Raw Input API检测触摸输入,例如this demo here。请务必留意WM_INPUT消息。

注1:可以删除原始输入消息,但不能修改或创建。

注意2:我不完全确定,但未处理的WM_INPUT消息可能会造成内存泄漏,因为事实上只有一个大指针。以防万一,处理钩子程序中的消息。