【问题标题】:C# Suppressing mouse click for multiple miceC#抑制多个鼠标的鼠标单击
【发布时间】:2013-01-25 09:17:02
【问题描述】:

我编写了一个当前处理来自多个鼠标设备的点击的应用程序。

我使用了this project 并进行了修改以处理与键盘相对的鼠标点击。

这工作正常,但是现在我需要知道如果我的应用程序已经处理了点击事件,是否有办法抑制它。该应用程序是一个问答游戏,因此其想法是问答大师将拥有(并且仍然能够使用)1 只鼠标,而其他参赛者将拥有自己的鼠标(作为蜂鸣器)。因此,当它们发出嗡嗡声时,我不希望鼠标单击事件在操作系统(或至少此应用程序)中触发。

这个概念是熟悉的 void WndProc(ref Message message) 覆盖,所以我尝试不调用 base.WndProc(ref Message)不希望触发点击事件,但这不起作用。

有人可以在这里指出正确的方向吗?

我应该走windows hook 路线吗?我看过这个,但我似乎无法弄清楚如何单独连接到每个鼠标设备。

任何帮助将不胜感激。

编辑:

这是一个 Windows 窗体 UI 项目,而不是 WPF。所以MultiPoint SDK from Microsoft 不起作用。

【问题讨论】:

  • Microsoft Multipoint SDK 中有什么内容吗? microsoft.com/multipoint/mouse-sdk/showcase.aspx - 它支持处理来自多个鼠标的输入。
  • 你打败了我,我想说,我应该提到我使用的是 Windows 窗体 UI,而不是 WPF。我已经看过多点 SDK。
  • Windows 挂钩不起作用,这需要通过 WM_INPUT 进行原始输入。需要 Pinvoke。
  • 那么有没有办法做到这一点?

标签: c# winforms hook hid wndproc


【解决方案1】:

解决这个问题的方法不是 WndProc,而是 PreFilterMessage()。通过在消息到达表单之前拦截消息,您可以将它们从消息泵中删除,从而导致它们永远无法到达被单击的控件。这也适用于表单中的子控件。

我回答了这个问题并在以下问题中发布了完整的来源:

C# Get Mouse handle (GetRawInputDeviceInfo)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多