鼠标左键按下后开始连点,鼠标左键松开后停止连点。(全局鼠标连点,不仅限于自身程序)
我先用全局鼠标钩子判断目前鼠标的左键是按下还是放开。
但是因为我有用驱动级的模拟键击的原因,在模拟鼠标左键放开的时候,我的全局鼠标钩子就直接把它当成为我鼠标左键松开了。这样就无法实现连点。
请问各位大神、前辈要怎么才能实现鼠标连点呢?(要全局鼠标连点,就像全局热键那样,窗体失去焦点或最小化也能用。我用的是驱动级的鼠标点击。)
使用定时器判断鼠标是否松开就行了:
1.鼠标按下
2.启用定时器&启用连点功能
3.每次检测到鼠标按下都对定时器清零
4.判断定时器的计时远大于预设的连点周期时则停止连点程序
鼠标钩子里面可以这样用吧:
private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));
if (nCode < 0)
{
return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);
}
else
{
//判断是否是鼠标点击 规避鼠标移动函数
if (wParam.ToString("X2") == "201" || wParam.ToString("X2") == "204")
{
MouseButtons button = MouseButtons.Left;
///这里的“1”就是操作次数
var e = new MouseEventArgs(button, 1, point.X, point.Y, 0);
MouseClickEvent?.Invoke(this, e);
this.Point = new Point(MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y);
这是操作系统事件
//return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);
}
return default(int);
}
}
简单备注了下下,你看看试试
后来,又思考了下,驱动级的鼠标连点,用物理鼠标来控制的话,通过监听系统消息是不行的,
你需要监听物理鼠标的USB-HID通信包,就像Bus Hound软件的功能那样。
这样就能准确的判断物理鼠标的点击动作了。
这个问题已经解决了,谢谢帮助