【问题标题】:Getting WM_TOUCH messages from every window and processing in my APP从每个窗口获取 WM_TOUCH 消息并在我的 APP 中处理
【发布时间】:2011-01-15 19:03:43
【问题描述】:

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

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

米哈伊尔

【问题讨论】:

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


    【解决方案1】:

    您必须挂钩全局消息过程。这样,您是第一个收到所有消息的人。您这样做的方式将不起作用,因为您的 wndproc 仅在您的窗口处于活动状态时才“活动”。

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

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

    【讨论】:

    • 我正在使用来自这个项目的代码codeproject.com/KB/cs/globalhook.aspx version2 它适用于鼠标和键盘挂钩,当我尝试注册 WH_GETMESSAGE 时它不起作用我的应用程序没有在事件中触发。我尝试的另一件事是,当我从鼠标钩子获取鼠标事件时,我使用消息上的 GetMessageExtraInfo() 来检查它是否来自触摸设备,我的应用程序的消息的消息是好的,但是当我触摸它外面的屏幕收到鼠标消息,但它显示现在是由触摸设备制成的。任何示例代码我如何构建你的 ans
    • 我不确定,因为我之前没有使用过该代码,而且因为它是在 C# 中,所以你将不得不做一些额外的事情(我想 globalhook 代码会这样做)。我只能说确保您的 WM_ 代码是正确的。如果它适用于鼠标和键盘,那么如果兼容性没有问题,它应该适用于触控。
    【解决方案2】:

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

    在 Windows 7 上没有全局捕获触摸输入的好方法。正如 Bob 所提到的,需要专门注册窗口才能接收触摸输入,而这对于其他应用程序的窗口来说是无法安全完成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多