从每个窗口获取WM_TOUCH消息并在我的APP中处理

时间:2011-01-15 19:03:44

标签: c# winapi visual-studio-2010 windows-7

我正在开发触摸屏应用程序。该应用程序的目标是当最终用户要使用Windows7在触摸屏设备的屏幕上进行垂直触摸移动(用他的手指垂直线)时,所有活动窗口都需要最小化(类似于显示桌面)。我的问题是如何处理在桌面上活动的每个窗口中发生的所有WM_TOUCH消息。没有Windows钩子,我可以使用它来获取所有WM_TOUCH消息。我试图使用WH_GETMESSAGE希望我可以提取WM_TOUCH消息但是不起作用,我试图使用WH_MOUSE_LL并获得所有鼠标事件。有一个函数Ge​​tMessageExtraInfo,我可以通过这段代码看到从哪里启动鼠标消息:

if((GetMessageExtraInfo()。ToInt32()& MOUSEEVENTF_FROMTOUCH)== 0xFF515700)             {                textBoxLog.AppendText( “asdada”);             } 如果是这样,则消息由TouchScreen设备启动。这仅适用于从我的应用程序(我的应用程序活动窗口)发送的消息,但不适用于我从应用程序窗口外的其他窗口获取的鼠标消息。我正在研究这个主题一段时间,我仍然无法得到任何答案。所以,如果有人知道我怎样才能将所有WM_TOUCH消息发送到我的应用程序,请回复。

米哈伊尔

2 个答案:

答案 0 :(得分:1)

您必须挂钩全局消息proc。这样,您就是第一个获取所有消息的人。你这样做的方式不起作用,因为当你的窗口处于活动状态时,你的wndproc只是“活动”。

只需创建一个新的wndproc,它只处理你想要成为全局的消息,并根据你想要的逻辑允许它们通过或切断它们。

http://msdn.microsoft.com/en-us/library/ms644990%28v=vs.85%29.aspx

答案 1 :(得分:0)

根据similiar discussion on Windows DevCenter,这似乎不可能:

  

没有好办法在Windows 7上全局捕获触摸输入。正如Bob所提到的,Windows需要专门注册才能接收触摸输入,这不是可以安全地为其他应用程序的窗口完成的事情。