拦截和禁用全局鼠标事件

时间:2011-11-30 09:30:35

标签: windows winapi mouseevent

我的鼠标有问题。当我只点击一下时,它会偶尔双击。我知道这是鼠标的问题,我已联系制造商,仍在等待回复。但与此同时,我想知道是否有一种方法可以在很短的时间内(可能是1-10毫秒)内点击鼠标左键两次,并禁用第二次点击。

我大多知道如何使用钩子,所以这不是问题,我的主要问题是如何阻止事件发生,如果可能的话。

2 个答案:

答案 0 :(得分:1)

有关如何防止处理鼠标消息的信息,请参阅MSDN中“LowLevelMouseProc回调函数”的文档: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644986(v=vs.85).aspx 具体来说,它说:“如果钩子过程处理了消息,它可能会返回一个非零值,以防止系统将消息传递给钩子链的其余部分或目标窗口过程。”所以,如果你了解Windows钩子,你知道怎么做。

编辑:实际上,现在我想更多关于它,你不想丢弃任何事件。您只想将doubleclick事件转换为另一个左键按下事件。我相信你可以在钩子处理程序中完成它,它会工作。你试过吗?

答案 1 :(得分:0)

在C#的WinForms中,你编写了一个事件处理程序,涉及鼠标接收MouseEventArgs对象。在其中,您可以访问某些信息,例如点击它的次数。

protected void RowClicked(object sender, MouseEventArgs evt)
{
    // Trigger it when the mouse was clicked only once
    if( evt.Button.Clicks == 1 ) {
        // ... more things ...
    }

    return;
}

其他GUI库还有其他可能性。也就是说,您的问题与GUI库无关。您必须在操作系统的配置选项中更改鼠标的灵敏度。例如,在Windows的控制面板中,您可以更改在单击和另一个单击之间传递的时间,以将其视为单击。在lUbuntu中,您可以在系统菜单>>中执行相同的操作。偏好设置>>键盘和鼠标。