我已成功安装了WH_GETMESSAGE
与SetWindowsHookEx
的挂钩,我可以看到应用程序收到的WM_POINTERDOWN
,WM_POINTERUP
等消息。 (它是在Windows 8.1上运行的32位桌面应用程序。)
现在,我不仅希望看到这些消息,而且我想删除其中一些消息。
GetMsgProc的文件说明:
GetMsgProc挂钩程序可以检查或修改消息。在钩子过程将控制权返回给系统之后,GetMessage或PeekMessage函数将消息以及任何修改返回给最初调用它的应用程序。
使用WM_KEYUP
消息,这似乎工作正常。我可以在挂钩中将消息设置为WM_NULL
,并且键事件将消失。
但是,使用WM_POINTER...
消息,这似乎不起作用。应用程序仍然接收消息(在调试器中验证)。
也许有其他方法来过滤/删除此类消息?
编辑:它必须使用未经修改的第三方应用程序(因此使用挂钩)。
更新:我设法通过在钩子内积极调用PeekMessage
来阻止点击事件(从长远来看可能不是一个好主意)。但是,我仍然无法阻止通过触摸滚动。
答案 0 :(得分:2)
解决方案1:
WH_GETMESSAGE
并非旨在删除或修改邮件,而只是为了监控邮件。不幸的是,标记的备用解决方案 - 使用WH_KEYBOARD_LL
和WH_MOUSE_LL
- 似乎也没有解决问题(因为多点触控不属于鼠标消息的类别)。对不起,马克!
我想指出WH_CALLWNDPROC
,它在预期窗口之前接收消息。这似乎是修改消息的可接受方式。
解决方案2:
目标窗口可能根本不关心WM_POINTER...
消息!它可以通过Raw Input API检测触摸输入,例如this demo here。请务必留意WM_INPUT
消息。
注1:可以删除原始输入消息,但不能修改或创建。
注意2:我不完全确定,但未处理的WM_INPUT
消息可能会造成内存泄漏,因为事实上只有一个大指针。以防万一,处理钩子程序中的消息。