public void Open(DbItemRemoteLink linkSettings, DbItemSetting itemSetting, bool jump)
        {
            _itemRemoteLink = linkSettings;
            if (linkSettings.Password == null)
            {
                linkSettings.Password = "";
            }

            Title = linkSettings.Name;
            Window mainWindow = Application.Current.MainWindow;

            Width  = linkSettings.ExternalWindowWidth > MinWidth ? linkSettings.ExternalWindowWidth : mainWindow.Width;
            Height = linkSettings.ExternalWindowHeight > MinHeight ? linkSettings.ExternalWindowHeight : mainWindow.Height;

            try
            {
                Show();
                FinalItemSetting finalItemSetting = null;
                if (linkSettings.Type == (int)RemoteType.rdp)
                {
                    _remoteControl   = new RemoteControl_rdp(this);
                    finalItemSetting = new FinalItemSetting_rdp((DbItemSetting_rdp)itemSetting);
                }
                if (linkSettings.Type == (int)RemoteType.ssh)
                {
                    _remoteControl   = new RemoteControl_ssh(this);
                    finalItemSetting = new FinalItemSetting_ssh((DbItemSetting_ssh)itemSetting);
                }
                if (linkSettings.Type == (int)RemoteType.telnet)
                {
                    _remoteControl   = new RemoteControl_telnet(this);
                    finalItemSetting = new FinalItemSetting_telnet((DbItemSetting_telnet)itemSetting);
                }
                if (_remoteControl == null)
                {
                    throw new Exception("可能是不支持的远程连接类型。");
                }
                _remoteControl.Visibility  = Visibility.Collapsed;
                Panel_Animation.Visibility = Visibility.Visible;
                Grid.Children.Add(_remoteControl);

                _remoteControl.OnConnected  = _remoteControl_OnConnected;
                _remoteControl.OnFatalError = OnFatalError;
                _remoteControl.OnNonfatal   = OnNonfatal;
                _remoteControl.Closed       = Remove;
                _remoteControl.FullScreen   = FullScreen;

                _remoteControl.Connect(linkSettings, finalItemSetting);
                _startFullScreen = finalItemSetting.FullScreen;
            }
            catch (Exception e)
            {
                OnFatalError("错误", $"远程桌面连接失败。\n原因:{e.Message}");
            }
        }
        public void Open(DbItemRemoteLink linkSettings, DbItemSetting itemSetting, bool jump)
        {
            _tabItem = MainWindow.AddTabItem(linkSettings.Name, this, jump);
            if (linkSettings.Password == null)
            {
                linkSettings.Password = "";
            }
            _tabItem.Closed = _tabItem_Closed;

            try
            {
                FinalItemSetting finalItemSetting = null;
                if (linkSettings.Type == (int)RemoteType.rdp)
                {
                    _remoteControl   = new RemoteControl_rdp(this);
                    finalItemSetting = new FinalItemSetting_rdp((DbItemSetting_rdp)itemSetting);
                }
                if (linkSettings.Type == (int)RemoteType.ssh)
                {
                    _remoteControl   = new RemoteControl_ssh(this);
                    finalItemSetting = new FinalItemSetting_ssh((DbItemSetting_ssh)itemSetting);
                }
                if (linkSettings.Type == (int)RemoteType.telnet)
                {
                    _remoteControl   = new RemoteControl_telnet(this);
                    finalItemSetting = new FinalItemSetting_telnet((DbItemSetting_telnet)itemSetting);
                }
                if (_remoteControl == null)
                {
                    throw new Exception("可能是不支持的远程连接类型。");
                }
                _remoteControl.Visibility  = Visibility.Collapsed;
                Panel_Animation.Visibility = Visibility.Visible;
                Grid.Children.Add(_remoteControl);

                _remoteControl.OnConnected  = _remoteControl_OnConnected;
                _remoteControl.OnFatalError = OnFatalError;
                _remoteControl.OnNonfatal   = OnNonfatal;
                _remoteControl.Closed       = Remove;
                _remoteControl.FullScreen   = FullScreen;

                _remoteControl.Connect(linkSettings, finalItemSetting);
                _startFullScreen = finalItemSetting.FullScreen;
            }
            catch (Exception e)
            {
                OnFatalError("错误", $"远程桌面连接失败。\n原因:{e.Message}");
            }
        }
        public override void Connect(DbItemRemoteLink linkSettings, FinalItemSetting finalItemSetting)
        {
            FinalItemSetting_rdp finalRemote = (FinalItemSetting_rdp)finalItemSetting;

            //分离服务器地址和端口
            string[] addr = linkSettings.Server.Split(':');
            int      port = 3389;

            if (addr.Length > 1)
            {
                int.TryParse(addr[1], out port);
            }
            if (port <= 0)
            {
                port = 3389;
            }

            //初始化远程连接属性
            if (MsRdpClient7 != null) //win7及以下版本
            {
                MsRdpClient7.Server   = addr[0];
                MsRdpClient7.UserName = linkSettings.UserName;
                MsRdpClient7.AdvancedSettings2.ClearTextPassword = linkSettings.Password;
                MsRdpClient7.AdvancedSettings2.RDPPort           = port;
                var ocx = (IMsRdpClientNonScriptable5)MsRdpClient7.GetOcx();
                ocx.PromptForCredentials         = false;                         //凭据提示对话框
                ocx.AllowPromptingForCredentials = true;                          //显示密码输入框

                MsRdpClient7.AdvancedSettings.BitmapPeristence           = 1;     //启用位图缓存
                MsRdpClient7.AdvancedSettings.Compress                   = 1;     //启用压缩
                MsRdpClient7.AdvancedSettings.ContainerHandledFullScreen = 1;     //启用容器处理的全屏模式。
                MsRdpClient7.AdvancedSettings2.BitmapPersistence         = 1;     //持久位图缓存
                MsRdpClient7.AdvancedSettings2.CachePersistenceActive    = 1;     //持久位图缓存
                MsRdpClient7.AdvancedSettings2.GrabFocusOnConnect        = false; //连接的时候获取焦点
                MsRdpClient7.AdvancedSettings7.EnableCredSspSupport      = true;  //指定是否为此连接启用凭据安全服务提供程序

                //分辨率
                if (finalItemSetting.DesktopSize.Width <= 0 || finalItemSetting.DesktopSize.Height <= 0)
                {
                    Window windows = Window.GetWindow(this);
                    MsRdpClient7.DesktopWidth  = (int)windows.Width - 4;
                    MsRdpClient7.DesktopHeight = (int)windows.Height - 34;
                }
                else
                {
                    MsRdpClient7.DesktopWidth  = (int)finalItemSetting.DesktopSize.Width;
                    MsRdpClient7.DesktopHeight = (int)finalItemSetting.DesktopSize.Height;
                }
                //性能选项
                if (finalRemote.Performance != DbItemSetting_rdp.CONNECTION_TYPE_AUTO)
                {
                    MsRdpClient7.AdvancedSettings8.NetworkConnectionType = (uint)finalRemote.Performance;
                }
                //颜色深度
                switch (finalRemote.ColorDepthMode)
                {
                case DbItemSetting_rdp.COLOR_15BPP: MsRdpClient7.ColorDepth = 15; break;

                case DbItemSetting_rdp.COLOR_16BPP: MsRdpClient7.ColorDepth = 16; break;

                case DbItemSetting_rdp.COLOR_24BPP: MsRdpClient7.ColorDepth = 24; break;

                case DbItemSetting_rdp.COLOR_32BPP: MsRdpClient7.ColorDepth = 32; break;

                default: MsRdpClient7.ColorDepth = 32; break;
                }
                //音频
                MsRdpClient7.AdvancedSettings6.AudioRedirectionMode = (uint)finalRemote.AudioRedirectionMode - 1;
                //组合键
                MsRdpClient7.SecuredSettings2.KeyboardHookMode = finalRemote.KeyboardHookMode - 1;
                //本地资源
                MsRdpClient7.AdvancedSettings2.RedirectPrinters   = finalRemote.RedirectionPrintf.Value ? true : false;    //打印机
                MsRdpClient7.AdvancedSettings6.RedirectClipboard  = finalRemote.RedirectionClipboard.Value ? true : false; //剪贴板重定向
                MsRdpClient7.AdvancedSettings3.RedirectSmartCards = finalRemote.RedirectionsMartcard.Value ? true : false; //智能卡重定向
                MsRdpClient7.AdvancedSettings3.RedirectPorts      = finalRemote.RedirectionsPort.Value ? true : false;     //端口重定向
                MsRdpClient7.AdvancedSettings3.RedirectDrives     = finalRemote.RedirectionsDriver.Value ? true : false;   //驱动器重定向
                                                                                                                           //MsRdpClient.AdvancedSettings6.RedirectDevices = finalRemote.RedirectionsVideo.Value ? true : false;// 视频设备重定向

                MsRdpClient7.AdvancedSettings4.ConnectionBarShowMinimizeButton = false;                                    //显示全部工具栏上的最小化按钮
                MsRdpClient7.AdvancedSettings7.ConnectToAdministerServer       = false;

                MsRdpClient7.Connect();
                User32.EnumChildWindows(MsRdpClient7.Handle, EnumWindowsProc, IntPtr.Zero);
            }
            else //win8 及以上版本
            {
                MsRdpClient9.Server   = addr[0];
                MsRdpClient9.UserName = linkSettings.UserName;
                MsRdpClient9.AdvancedSettings2.ClearTextPassword = linkSettings.Password;
                MsRdpClient9.AdvancedSettings2.RDPPort           = port;
                var ocx = (IMsRdpClientNonScriptable5)MsRdpClient9.GetOcx();
                ocx.PromptForCredentials         = false;                         //凭据提示对话框
                ocx.AllowPromptingForCredentials = true;                          //显示密码输入框

                MsRdpClient9.AdvancedSettings.BitmapPeristence           = 1;     //启用位图缓存
                MsRdpClient9.AdvancedSettings.Compress                   = 1;     //启用压缩
                MsRdpClient9.AdvancedSettings.ContainerHandledFullScreen = 1;     //启用容器处理的全屏模式。
                MsRdpClient9.AdvancedSettings2.BitmapPersistence         = 1;     //持久位图缓存
                MsRdpClient9.AdvancedSettings2.CachePersistenceActive    = 1;     //持久位图缓存
                MsRdpClient9.AdvancedSettings2.GrabFocusOnConnect        = false; //连接的时候获取焦点
                MsRdpClient9.AdvancedSettings7.EnableCredSspSupport      = true;  //指定是否为此连接启用凭据安全服务提供程序

                //分辨率
                if (finalItemSetting.DesktopSize.Width <= 0 || finalItemSetting.DesktopSize.Height <= 0)
                {
                    Window windows = Window.GetWindow(this);
                    MsRdpClient9.DesktopWidth  = (int)windows.Width - 4;
                    MsRdpClient9.DesktopHeight = (int)windows.Height - 34;
                }
                else
                {
                    MsRdpClient9.DesktopWidth  = (int)finalItemSetting.DesktopSize.Width;
                    MsRdpClient9.DesktopHeight = (int)finalItemSetting.DesktopSize.Height;
                }
                //性能选项
                if (finalRemote.Performance == DbItemSetting_rdp.CONNECTION_TYPE_AUTO)
                {
                    MsRdpClient9.AdvancedSettings9.BandwidthDetection = true;                                                                   //自动检查带宽
                }
                else
                {
                    MsRdpClient9.AdvancedSettings8.NetworkConnectionType = (uint)finalRemote.Performance;
                }
                //颜色深度
                switch (finalRemote.ColorDepthMode)
                {
                case DbItemSetting_rdp.COLOR_15BPP: MsRdpClient9.ColorDepth = 15; break;

                case DbItemSetting_rdp.COLOR_16BPP: MsRdpClient9.ColorDepth = 16; break;

                case DbItemSetting_rdp.COLOR_24BPP: MsRdpClient9.ColorDepth = 24; break;

                case DbItemSetting_rdp.COLOR_32BPP: MsRdpClient9.ColorDepth = 32; break;

                default: MsRdpClient9.ColorDepth = 32; break;
                }
                //音频
                MsRdpClient9.AdvancedSettings6.AudioRedirectionMode = (uint)finalRemote.AudioRedirectionMode - 1;
                //录音设备
                MsRdpClient9.AdvancedSettings8.AudioCaptureRedirectionMode = finalRemote.AudioCaptureRedirectionMode == DbItemSetting_rdp.AAUDIOCAPTURE_TRUE;
                //组合键
                MsRdpClient9.SecuredSettings2.KeyboardHookMode = finalRemote.KeyboardHookMode - 1;
                //重定向
                MsRdpClient9.AdvancedSettings2.RedirectPrinters   = finalRemote.RedirectionPrintf.Value ? true : false;    //打印机
                MsRdpClient9.AdvancedSettings6.RedirectClipboard  = finalRemote.RedirectionClipboard.Value ? true : false; //剪贴板重定向
                MsRdpClient9.AdvancedSettings3.RedirectSmartCards = finalRemote.RedirectionsMartcard.Value ? true : false; //智能卡重定向
                MsRdpClient9.AdvancedSettings3.RedirectPorts      = finalRemote.RedirectionsPort.Value ? true : false;     //端口重定向
                MsRdpClient9.AdvancedSettings3.RedirectDrives     = finalRemote.RedirectionsDriver.Value ? true : false;   //驱动器重定向
                MsRdpClient9.AdvancedSettings4.ConnectionBarShowMinimizeButton = false;                                    //显示全部工具栏上的最小化按钮

                MsRdpClient9.Connect();
                User32.EnumChildWindows(MsRdpClient9.Handle, EnumWindowsProc, IntPtr.Zero);
            }
        }