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 override void Connect(DbItemRemoteLink linkSettings, FinalItemSetting finalItemSetting)
        {
            string[] values = linkSettings.Server.Split(':');
            if (values.Length > 2)
            {
                throw new Exception($"服务器地址不正确。");                   //地址不正确
            }
            string server = values[0];
            string port   = values.Length == 2 ? $"-P {values[1]}" : "-P 23";

            FinalItemSetting_telnet finalSetting = (FinalItemSetting_telnet)finalItemSetting;

            IntPtr parentHwnd = FormsControl.Handle;
            Window windows    = Window.GetWindow(this);
            int    width      = (int)windows.Width - 4;
            int    height     = (int)windows.Height - 34;

            Task.Run(() =>
            {
                Putty.Settings settings = new Putty.Settings
                {
                    fontname          = finalSetting.FontName,
                    fontsize          = finalSetting.FontSize,
                    curtype           = finalSetting.Cursor - 1,
                    linecodepage      = Encoding.GetEncoding(finalSetting.Character).BodyName,
                    backspaceisdelete = finalSetting.Fallbackkeys - 1,
                    mouseisxterm      = finalSetting.MouseAction - 1,
                    puttycolor        = new Putty.PuttyColor(finalSetting.GetPuttyColor()),
                    rxvthomeend       = finalSetting.HomeAndEnd - 1,
                    functionkeys      = finalSetting.FnAndKeypad - 1,
                    cjkambigwide      = finalSetting.CJKAmbigWide.Value,
                    capslockcyr       = finalSetting.CapsLockCyr.Value,
                    crimplieslf       = finalSetting.CRImpliesLF.Value,
                    lfimpliescr       = finalSetting.LFImpliesCR.Value,
                };

                string user = string.IsNullOrEmpty(linkSettings.UserName) ? "" : $"-l {linkSettings.UserName}";
                string pw   = string.IsNullOrEmpty(linkSettings.Password) ? "" : $"-pw {linkSettings.Password}";

                if (!_putty.Create(parentHwnd, $"-telnet {port} {user} {pw} {server}", 0, 0, width, height, settings))
                {
                    string errorText = Marshal.PtrToStringAnsi(_putty.GetError());
                    Dispatcher.Invoke(() => { OnFatalError?.Invoke("错误", errorText); });
                }

                _putty.Dispose();
                _putty = null;
                GC.Collect();
                GC.SuppressFinalize(this);
            });
        }
        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}");
            }
        }