2011-08-29 45 views
6

我使用的VS 2010生成的简单窗体包含2个按钮,启动和停止。 使用SetWindowsHookEx启动WH_MOUSE_LL触发器,并停止挂钩。 挂钩工作正常,我管理“替换”双击鼠标中键,我唯一的问题是单击窗体的最小化/最大化/关闭按钮,似乎有某种“事件竞赛”钩子和上述按钮所调用的事件之间。它反映了这样一个事实,即当你按下其中一个按钮时,它会一直按住一段时间,然后它完成它的动作(例如最小化表单)。 当我右键单击表单并选择其中一个动作时,它立即响应同样的事情时,我停止挂钩并按上述按钮之一。 有没有人遇到过这种行为?C#低级别鼠标挂钩和窗体事件处理

+3

我的第一个直觉是,你可能使用了错误的工具来完成这项工作 - 当你需要使用Windows钩子时,我无法想到很多情况。也许如果你能回到导致你实施这个解决方案的问题上,并且发布了一个关于它的问题呢? –

+1

嗨,据我所知,我做了相当多的研究之前,接近这种方法,如果我想我的通用鼠标产生双击时,我点击鼠标中键是“拦截”中间点击和模拟两个左键单击相同x,y的鼠标,如果我希望它甚至当我的应用程序工作。不在焦点或最小化(或在系统托盘)挂钩是唯一的方法。任何方式我更多的C/C++程序员我只是想使用C#,因为创建GUI的简单性。 – Alex

+1

@Alex - 您的研究将导致您得出错误结论。只需捕获鼠标中键,并执行与双击鼠标事件相同的事件(实际上只是单击事件)。除了不是所有的老鼠都有鼠标中键,所以要注意这一点。 –

回答

2

我以前也经历过这种情况。我不确定究竟是什么原因,但我总是通过监听当鼠标进入并离开窗体,窗口等客户区域时触发的事件来解决问题。你可以使用这些事件来挂钩和解开鼠标,然后你会得到正常的行为。