【问题标题】:Suppress mouse-movement抑制鼠标移动
【发布时间】:2011-04-27 01:04:36
【问题描述】:

我需要冻结屏幕上的 Windows 鼠标光标,使其保持悬停在特定 UI 元素上。当鼠标处于这种冻结状态时,我仍然希望能够使用“假”鼠标指针与 UI 进行交互。

目前,我有一个低级鼠标钩子,可以防止 WM_MOUSEMOVE 消息被传递,有效地阻止所有真正的鼠标移动。但是,当我不传递更新后的坐标时,Windows 实际上会在单独的 WM_MOUSEMOVE 消息中向我发送旧坐标,好像是为了纠正鼠标没有移动的事实。

关于如何防止 Windows 向我发送这些更正的坐标,或者如何冻结实际鼠标光标并仍然允许物理鼠标控制“假”光标的另一种方法?

【问题讨论】:

  • 当你写完这个最有用的应用程序后,请给我一份!开个玩笑,我相信你有充分的理由想要这样做。
  • 如果您不传递它们,您可以忽略它们吗? (Piskvor 提醒自己永远不要买任何东西,因为他可能会沮丧地弄坏鼠标)。另外,您可以通过 SendMessage() 进行其他交互吗?不确定这是否是一种更好的毒药,但至少鼠标仍然可控。
  • 当然这听起来是个可怕的想法,相信我我知道。但这样做的原因是我想将鼠标冻结在一个 html 元素上(例如,一个弹出的 javascript 菜单),但此时能够检查 dom。
  • 没有任何理由可以证明这个可怕的想法。还有其他方法可以指示选择。例如,使用一种颜色。查看 Firefox 的 Firebug 插件以获取灵感。

标签: c# windows mouse


【解决方案1】:

您可以使用 DirectInput 独占模式抑制鼠标光标移动。 当必须抑制光标移动时,您应该获取鼠标输入设备。这将阻止 Windows 光标移动,但您可以使用 DirectInput API 获取假光标的消息。

【讨论】:

    【解决方案2】:

    如果您移动鼠标光标位置以响应 WM_MOUSEMOVE 消息,以将鼠标放回您想要的位置,您将收到另一个鼠标移动消息,因为鼠标已再次移动(因为您移动了它)。要停止这种情况,如果鼠标位置已经在正确的位置,请不要设置它。

    您可能还想将鼠标位置剪辑到您的窗口并获得对它的独占访问权限。

    【讨论】:

    • 我没有移动实际的鼠标光标,我通过阻止 mousemove 事件到达窗口来阻止它移动。
    【解决方案3】:

    你为什么不直接在你想冻结的地方画一个光标的图像,然后将真正的鼠标光标设置为隐藏(Cursor.Hide IIRC)。

    【讨论】:

    • 窗口必须真正认为鼠标确实悬停在它上面。
    【解决方案4】:

    我不清楚您要做什么,也许为您的应用制作教程并且您想显示鼠标移动等。也许这个库会很有用:

    http://www.codeproject.com/KB/system/globalmousekeyboardlib.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多