C#怎么实现鼠标连点呢?

鼠标左键按下后开始连点,鼠标左键松开后停止连点。(全局鼠标连点,不仅限于自身程序)
我先用全局鼠标钩子判断目前鼠标的左键是按下还是放开。
但是因为我有用驱动级的模拟键击的原因,在模拟鼠标左键放开的时候,我的全局鼠标钩子就直接把它当成为我鼠标左键松开了。这样就无法实现连点。
请问各位大神、前辈要怎么才能实现鼠标连点呢?(要全局鼠标连点,就像全局热键那样,窗体失去焦点或最小化也能用。我用的是驱动级的鼠标点击。)

c#

4个回答

使用定时器判断鼠标是否松开就行了:
1.鼠标按下
2.启用定时器&启用连点功能
3.每次检测到鼠标按下都对定时器清零
4.判断定时器的计时远大于预设的连点周期时则停止连点程序

hcli168
waesaeasea 你好,能否详细说以下。
接近 3 年之前 回复

鼠标钩子里面可以这样用吧:
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);
        }
    }


            简单备注了下下,你看看试试
tb612443
tb612443 回复waesaeasea: 我知道的也不多。。。
接近 3 年之前 回复
hcli168
waesaeasea 你好可以详细聊么,关于这个连点
接近 3 年之前 回复

后来,又思考了下,驱动级的鼠标连点,用物理鼠标来控制的话,通过监听系统消息是不行的,
你需要监听物理鼠标的USB-HID通信包,就像Bus Hound软件的功能那样。
这样就能准确的判断物理鼠标的点击动作了。

hcli168
waesaeasea 回复Antecer: 编译过去了,但是没有输出。怎么用啊
2 年多之前 回复
hcli168
waesaeasea 回复Antecer: 这个问题困扰我很久了唉
2 年多之前 回复
hcli168
waesaeasea 回复Antecer: 我编译不过去这个。提示:System.NullReferenceException:“未将对象引用设置到对象的实例。”
2 年多之前 回复
ymh441915964
Antecer 回复waesaeasea: 根据原帖的意思,就是从设备硬件ID上来判断是哪个鼠标触发的按键,这样就不会误判了。
2 年多之前 回复
ymh441915964
Antecer 回复waesaeasea: https://stackoverflow.com/questions/14584280/c-sharp-get-mouse-handle-getrawinputdeviceinfo
2 年多之前 回复
ymh441915964
Antecer 回复waesaeasea: 看看这个帖子吧,已经很详细了,再要详细就只能让人给你写个实例出来了:
2 年多之前 回复
hcli168
waesaeasea 能否详细一些。
2 年多之前 回复

这个问题已经解决了,谢谢帮助

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐