C#在一台客户端进行了某个操作以后如何让其他不同的客户端如何实现相同的操作(三)

在客户端收到socket发送过来的消息时首先对收到的二进制数组进行解析,解析为具体的坐标:

   if (!isOpenSocket)
                        continue;
                    ///接受从服务器返回的信息
                    string recvStr = "";
                    byte[] recvBytes = new byte[2048];
                    int bytes;
                    bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
                    recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
                    List<string> list = new List<string>(recvStr.Split(','));
                    var arr = list.ToArray();

因为鼠标钩子两次收到的坐标不连续,所以可能会导致一次连续的画线操作中间断开,因此如果判断他没有一个坐标为-1,-1即我所使用的鼠标释放操作的坐标值,则将这次的第一个点和上一次手打的最后一个点连接起来

 if (x != -1 && int.Parse(arr[0])!=-1)
                    {
                        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE, x * 65536 / 1920, y * 65536 / 1080, 0, 0);
                        Cursor.Position = new System.Drawing.Point(int.Parse(arr[0]), int.Parse(arr[1]));
                        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                    }

使用mouse_event模拟鼠标点击操作,因为 mouse_event模拟鼠标移动操作总是产生鼠标乱飘的问题,因此使用Cursor.Position = new System.Drawing.Point(int.Parse(arr[0]), int.Parse(arr[1]));操作来完成鼠标的移动操作,在循环开始时进行鼠标按下操作,在结束时进行鼠标释放操作会导致鼠标释放总是没有成功实现,从而导致鼠标一直处于按下的状态,因此在将两个点连接起来操作的时候独立进行按下,移动,释放操作,使用这个方法的同时也可以避免在一个用户进行共享的时候,查看共享的用户进行操作导致整个分享画的线条出错。

连接收到的坐标和存储最后一个点的代码:

 for (int i = 0; i < arr.Count(); i = i + 2)
                    {
                        //int X = int.Parse(arr[i]) * 65536 / 1920;
                        //int Y = int.Parse(arr[i + 1]) * 65536 / 1080;
                        int X = int.Parse(arr[i]);
                        int Y = int.Parse(arr[i + 1]);
                        if (X == -1)
                            continue;
                        if (i != 0)
                            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE, int.Parse(arr[i - 2]) * 65536 / 1920, int.Parse(arr[i - 1]) * 65536 / 1080, 0, 0);


                        Cursor.Position = new System.Drawing.Point(X, Y);
                        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                        //mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, X, Y, 0, 0);
                    }
                    x = int.Parse(arr[arr.Count() - 2]);
                    y = int.Parse(arr[arr.Count() - 1]);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值