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

wme*_*yer 11 c++ winapi touch setwindowshookex windows-8

我已经成功地安装一个WH_GETMESSAGE带有钩SetWindowsHookEx,我可以看到的WM_POINTERDOWN,WM_POINTERUP等应用程序接收消息.(它是在Windows 8.1上运行的32位桌面应用程序.)

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

GetMsgProc的文档说:

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

有了WM_KEYUP消息,这似乎工作正常.我可以将消息设置为WM_NULL挂钩,并且键事件将消失.

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

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

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

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

Pro*_*oxy 2

解决方案一:

WH_GETMESSAGE不是为了删除或修改消息而设计的,只是为了监视它们。不幸的是,马克的替代解决方案 - 使用WH_KEYBOARD_LLWH_MOUSE_LL- 似乎也没有解决问题(因为多点触控不属于鼠标消息的类别)。对不起,标记!

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

解决方案2:

目标窗口可能WM_POINTER...根本不关心消息!它可以通过原始输入API 检测触摸输入,就像这里的演示一样。WM_INPUT也请尝试留意消息。

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

注2:我不完全确定,但未处理的WM_INPUT消息可能会造成内存泄漏,因为该东西实际上是一个巨大的指针。为了以防万一,请在挂钩过程中处理消息。


归档时间:

查看次数:

2454 次

最近记录:

11 年,11 月 前