public void GetNextScreen(int height, int width, int x, int y, ScreenDisplayMode mode)
        {
            if (this.WhetherClose)
            {
                return;
            }

            _frameCount++;
            //Console.WriteLine(this.imgDesktop.Height + " | " + Width + "|" + this.Height + " | " + this.Width);

            if (_frameCount == 1)//使帧数更连续
            {
                var rect = SerializePacket(new ScreenHotRectanglePack()
                {
                    X        = x,
                    Y        = y,
                    Height   = height,
                    Width    = width,
                    CtrlMode = mode.ConvertTo <int>()
                });
                for (int i = 0; i < 3; i++)
                {
                    SendTo(CurrentSession, MessageHead.S_SCREEN_NEXT_SCREENBITMP, rect);
                }
            }
            else if (_frameCount == 3)
            {
                _frameCount = 0;
            }
        }
        public void StartGetScreen(int height, int width, int x, int y, ScreenDisplayMode mode)
        {
            var rect = SerializePacket(new ScreenHotRectanglePack()
            {
                X        = x,
                Y        = y,
                Height   = height,
                Width    = width,
                CtrlMode = mode.ConvertTo <int>()
            });

            _frameCount = 0;
            //第一帧不计入连续帧
            for (int i = 0; i < 3; i++)
            {
                SendTo(CurrentSession, MessageHead.S_SCREEN_NEXT_SCREENBITMP, rect);
            }
        }
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_SYSCOMMAND)
            {
                IntPtr sysMenuHandle = GetSystemMenu(m.HWnd, false);
                switch (m.WParam.ToInt32())
                {
                case IDM_SCREENMON:

                    if (_screenDisplayMode == ScreenDisplayMode.Original)
                    {
                        return;
                    }

                    CheckMenuItem(sysMenuHandle, IDM_SCREENMON, MF_CHECKED);
                    CheckMenuItem(sysMenuHandle, IDM_FULL_SCREEN, MF_UNCHECKED);

                    EnableMenuItem(sysMenuHandle, IDM_KEYMOUSE_CTRL, MF_ENABLED);

                    this.imgDesktop.Dock     = DockStyle.None;
                    this.imgDesktop.SizeMode = PictureBoxSizeMode.AutoSize;

                    _screenDisplayMode = ScreenDisplayMode.Original;
                    break;

                case IDM_FULL_SCREEN:
                    if (_screenDisplayMode == ScreenDisplayMode.Fullscreen)
                    {
                        return;
                    }

                    CheckMenuItem(sysMenuHandle, IDM_FULL_SCREEN, MF_CHECKED);
                    CheckMenuItem(sysMenuHandle, IDM_SCREENMON, MF_UNCHECKED);

                    //CheckMenuItem(sysMenuHandle, IDM_KEYMOUSE_CTRL, MF_UNCHECKED);
                    //EnableMenuItem(sysMenuHandle, IDM_KEYMOUSE_CTRL, MF_DISABLED);

                    this.imgDesktop.Dock     = DockStyle.Fill;
                    this.imgDesktop.SizeMode = PictureBoxSizeMode.StretchImage;
                    _screenDisplayMode       = ScreenDisplayMode.Fullscreen;
                    break;

                case IDM_KEYMOUSE_CTRL:
                    if (_isControl == true)
                    {
                        CheckMenuItem(sysMenuHandle, IDM_KEYMOUSE_CTRL, MF_UNCHECKED);
                        _isControl = false;
                    }
                    else
                    {
                        CheckMenuItem(sysMenuHandle, IDM_KEYMOUSE_CTRL, MF_CHECKED);
                        _isControl = true;
                    }
                    break;

                case IDM_LOCK_MOUSEKEY:
                    if (_islockMkey == false)
                    {
                        this.RemoteScreenAdapterHandler.RemoteMouseBlock(true);
                        _islockMkey = true;
                        CheckMenuItem(sysMenuHandle, IDM_LOCK_MOUSEKEY, MF_CHECKED);
                    }
                    else
                    {
                        this.RemoteScreenAdapterHandler.RemoteMouseBlock(false);
                        _islockMkey = false;
                        CheckMenuItem(sysMenuHandle, IDM_LOCK_MOUSEKEY, MF_UNCHECKED);
                    }
                    break;

                case IDM_BLACKSCREEN:
                    this.RemoteScreenAdapterHandler.RemoteScreenBlack();
                    break;

                case IDM_SAVESCREEN:
                    string fileName = DateTime.Now.ToFileTime().ToString() + " 远程桌面快照.bmp";
                    Image  img      = imgDesktop.Image;
                    img.Save(fileName);

                    MessageBoxHelper.ShowBoxExclamation("快照已保存到:" + Path.Combine(Environment.CurrentDirectory, fileName));
                    break;

                case IDM_FULL_DIFFER:

                    CheckMenuItem(sysMenuHandle, IDM_FULL_DIFFER, MF_CHECKED);
                    CheckMenuItem(sysMenuHandle, IDM_DIFFER, MF_UNCHECKED);
                    this.RemoteScreenAdapterHandler.RemoteChangeScanMode(ScreenScanMode.Noninterlaced);
                    break;

                case IDM_DIFFER:

                    CheckMenuItem(sysMenuHandle, IDM_FULL_DIFFER, MF_UNCHECKED);
                    CheckMenuItem(sysMenuHandle, IDM_DIFFER, MF_CHECKED);
                    this.RemoteScreenAdapterHandler.RemoteChangeScanMode(ScreenScanMode.Difference);
                    break;

                case IDM_1X:

                    CheckMenuItem(sysMenuHandle, IDM_1X, MF_CHECKED);
                    CheckMenuItem(sysMenuHandle, IDM_4X, MF_UNCHECKED);
                    CheckMenuItem(sysMenuHandle, IDM_16X, MF_UNCHECKED);
                    this.RemoteScreenAdapterHandler.RemoteResetBrandColor(BrandColorMode.X1);
                    break;

                case IDM_4X:

                    CheckMenuItem(sysMenuHandle, IDM_1X, MF_UNCHECKED);
                    CheckMenuItem(sysMenuHandle, IDM_4X, MF_CHECKED);
                    CheckMenuItem(sysMenuHandle, IDM_16X, MF_UNCHECKED);
                    this.RemoteScreenAdapterHandler.RemoteResetBrandColor(BrandColorMode.X4);
                    break;

                case IDM_16X:

                    CheckMenuItem(sysMenuHandle, IDM_1X, MF_UNCHECKED);
                    CheckMenuItem(sysMenuHandle, IDM_4X, MF_UNCHECKED);
                    CheckMenuItem(sysMenuHandle, IDM_16X, MF_CHECKED);
                    this.RemoteScreenAdapterHandler.RemoteResetBrandColor(BrandColorMode.X16);
                    break;

                case IDM_Qty:
                    var dlg = new ScreenQtyForm();
                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        this.RemoteScreenAdapterHandler.RemoteSetScreenQuantity(dlg.QualityValue);
                    }
                    break;

                case IDM_SET_CLIPBOARD:
                    using (var setClipoardDlg = new EnterForm())
                    {
                        setClipoardDlg.Caption = "设置的剪切板内容:";
                        if (setClipoardDlg.ShowDialog() == DialogResult.OK)
                        {
                            var text = setClipoardDlg.Value;
                            this.RemoteScreenAdapterHandler.SetRemoteClipoardText(text);
                        }
                    }
                    break;

                case IDM_GET_CLIPBOARD:
                    this.RemoteScreenAdapterHandler.GetRemoteClipoardText();
                    break;

                case IDM_CTRL_ALT_DEL:
                    this.RemoteScreenAdapterHandler.SendCtrlAltDel();
                    break;

                case IDM_CHANGE_MONITOR:
                    var dialog = new ScreenMonitorChangeForm();
                    dialog.SetMonitors(_monitorItems, _currenMonitorIndex);
                    if (dialog.ShowDialog() == DialogResult.OK)
                    {
                        if (_currenMonitorIndex == dialog.CurrentMonitorIndex)
                        {
                            break;
                        }

                        _currenMonitorIndex = dialog.CurrentMonitorIndex;
                        this.RemoteScreenAdapterHandler.MonitorChange(dialog.CurrentMonitorIndex);
                    }
                    break;

                case IDM_DELETE_WALLPAPER:
                    this.RemoteScreenAdapterHandler.RemoteDeleteWallPaper();
                    break;

                case IDM_RECORD:
                    if (_stop)
                    {
                        if (_srcImageHeight == 0 || _srcImageWidth == 0)
                        {
                            return;
                        }
                        if (!_videoFrameGraphics.IsNull())
                        {
                            _videoFrameGraphics.Dispose();
                        }
                        if (!_videoFrame.IsNull())
                        {
                            _videoFrame.Dispose();
                        }
                        lock (this)
                        {
                            _videoFrame         = new Bitmap(this._srcImageWidth, this._srcImageHeight);
                            _videoFrameGraphics = Graphics.FromImage(_videoFrame);
                            _videoFrameGraphics.DrawImage(_currentFrame, 0, 0);
                        }
                        _stop = false;
                        ModifyMenu(sysMenuHandle, _menuContextIndex, MF_BYPOSITION, IDM_RECORD, "停止录制");
                        Task.Run(CreateDesktopRecordThread);
                    }
                    else
                    {
                        _stop = true;
                        ModifyMenu(sysMenuHandle, _menuContextIndex, MF_BYPOSITION, IDM_RECORD, "开始录制");
                    }
                    break;
                }
            }
            base.WndProc(ref m);
        }