/// <summary>
        /// 单线程处理发送消息
        /// </summary>
        public static void DealWidthSendMessage(Form2 form2)
        {
            Message           msg     = null;
            BackgroundService service = new BackgroundService();

            while (true)
            {
                SendedMessageOutViewModel send = null;
                try
                {
                    send = service.GetSendedMessage(QqSocketClientDictionary.Keys);
                    if (send != null)
                    {
                        msg = new Message
                        {
                            Context = send.To + "," + send.Message,
                            QQ      = send.From
                        };
                        var client = QqSocketClientDictionary[msg.QQ];
                        client.BeginSend(msg.MsgBody, 0, msg.MsgBody.Length,
                                         SocketFlags.None, (obj) => { Logger.Info(msg.QQ + "发送消息"); }, null);
                    }
                }
                catch (Exception ex)
                {
                    try
                    {
                        Logger.Error(ex.ToString());
                        service.UpdateSendedMessage(send.Id);
                        // 关闭,掉线
                        QqSocketClientDictionary.TryRemove(msg.QQ, out var val);
                        var pid     = Global.QqProcessDictionary[msg.QQ];
                        var process = Process.GetProcessById(pid);
                        if (process != null)
                        {
                            process.Kill();
                            process.Close();
                        }
                    }
                    catch (Exception)
                    {
                    }
                    form2.UpdateStatusDesc(msg.QQ, "掉线");
                }
                Thread.Sleep(3000);
            }
        }
Exemplo n.º 2
0
        public static void LoginQQ(string qq, string pwd, Form2 form2)
        {
            int    pid     = QqProcessDictionary[qq];
            IntPtr hIntPtr = IntPtr.Zero;
            var    t       = DateTime.Now;

            while (hIntPtr == IntPtr.Zero)
            {
                hIntPtr = FindWindow("CQUI", "酷Q 5.11.10A (180130)");
                if (DateTime.Now - t > new TimeSpan(0, 0, 10))
                {
                    break;
                }
            }

            MoveWindow(hIntPtr, -1000, -1000, 500, 400, true);
            ShowWindow(hIntPtr, SW_RESTORE);
            SetForegroundWindow(hIntPtr);
            Thread.Sleep(50);
            SendMessage(hIntPtr, WM_SYSKEYDOWN, 0X09, 0);
            Thread.Sleep(50);
            SendMessage(hIntPtr, WM_SYSKEYDOWN, 0X09, 0);
            Thread.Sleep(50);
            InputStr(hIntPtr, qq);
            Thread.Sleep(50);
            SendMessage(hIntPtr, WM_SYSKEYDOWN, 0X09, 0);
            Thread.Sleep(50);
            InputStr(hIntPtr, pwd);
            Thread.Sleep(50);
            SendMessage(hIntPtr, WM_SYSKEYDOWN, 0X09, 0);
            Thread.Sleep(50);
            SendMessage(hIntPtr, WM_SYSKEYDOWN, 0X0D, 0);
            Thread.Sleep(50);
            SendMessage(hIntPtr, WM_SYSKEYUP, 0X0D, 0);
            Thread.Sleep(3000);
            hIntPtr = FindWindow("CQUI", "酷Q 5.11.10A (180130)");
            if (hIntPtr != IntPtr.Zero)
            {
                var p = Process.GetProcessById(pid);
                hIntPtr = FindWindow(null, "错误");
                if (hIntPtr != IntPtr.Zero)
                {
                    form2.UpdateStatusDesc(qq, "账号或密码错误");
                }
                else
                {
                    hIntPtr = FindWindow(null, "登录验证");
                    if (hIntPtr != IntPtr.Zero)
                    {
                        form2.UpdateStatusDesc(qq, "设备锁限制");
                    }
                    else
                    {
                        DateTime start = DateTime.Now;
                        while (false)
                        {
                            if (DateTime.Now - start >= new TimeSpan(0, 1, 0))
                            {
                                break;
                            }
                            // TODO:需要修改
                            hIntPtr = FindWindow(null, "登陆验证");
                            if (hIntPtr == IntPtr.Zero)
                            {
                                Thread.Sleep(1000);
                            }
                            else
                            {
                                hIntPtr = FindWindow("CQUI", "酷Q 5.11.10A (180130)");
                                if (hIntPtr == IntPtr.Zero)
                                {
                                    form2.UpdateStatusDesc(qq, "登陆成功");

                                    return;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        form2.UpdateStatusDesc(qq, "其他错误");
                    }
                }


                if (p != null)
                {
                    p.Kill();
                    p.Close();
                }
                QqProcessDictionary.TryRemove(qq, out pid);
            }
            else
            {
                // 登陆成功
                form2.UpdateStatusDesc(qq, "登陆成功");
            }
        }