// [Method] 원격연결 객체 생성 private async void CreateRdpClient(RdpHost host) { await dispatcher.Invoke(async() => { string[] ServerIps = host.Server.Split(':'); // 원격연결 표시 폼 생성 Form rdpFrom = new Form(); rdpFrom.ShowIcon = false; rdpFrom.Name = host.Server.Replace(".", ""); rdpFrom.Text = $"({rdpFrom.Name}) {host.Description}"; rdpFrom.Size = new System.Drawing.Size(1024, 768); rdpFrom.FormClosed += new FormClosedEventHandler(this.rdpForm_Closed); var rdp = new RdpControl(); // 이미 연결된 경우 if (rdpConnects.ContainsKey(rdpFrom.Name)) { Status = $"({host.Server}) 이미 연결 되었습니다."; return; } // 연결 컬렉션에 추가 rdpConnects.Add(rdpFrom.Name, rdpFrom); // 원격연결 초기화 설정 ((System.ComponentModel.ISupportInitialize)(rdp)).BeginInit(); rdp.Dock = DockStyle.Fill; rdp.Enabled = true; rdp.OnConnecting += new EventHandler(this.rdp_OnConnecting); rdp.OnDisconnected += new IMsTscAxEvents_OnDisconnectedEventHandler(this.rdp_OnDisconnected); rdp.OnConnected += Rdp_OnConnected; rdpFrom.Controls.Add(rdp); rdpFrom.WindowState = FormWindowState.Maximized; rdpFrom.Show(); ((System.ComponentModel.ISupportInitialize)(rdp)).EndInit(); // 원격연결 객체 속성 설정 rdp.Name = rdpFrom.Name; rdp.Server = ServerIps.Length == 1 ? host.Server : ServerIps[0]; rdp.UserName = host.UserName; rdp.AdvancedSettings7.RDPPort = ServerIps.Length == 1 ? 3389 : Convert.ToInt32(ServerIps[1]); //rdp.AdvancedSettings7.ContainerHandledFullScreen = 1; rdp.AdvancedSettings7.SmartSizing = host.SmartSizing; rdp.AdvancedSettings7.EnableCredSspSupport = true; rdp.AdvancedSettings7.ClearTextPassword = host.ClearTextPassword; //rdp.AdvancedSettings7.PublicMode = false; rdp.ColorDepth = host.ColorDepth; rdp.FullScreen = host.FullScreen; //rdp.DesktopWidth = rdpFrom.ClientRectangle.Width; //rdp.DesktopHeight = rdpFrom.ClientRectangle.Height; var screenRect = Screen.PrimaryScreen.Bounds; rdp.DesktopWidth = screenRect.Width; rdp.DesktopHeight = screenRect.Height; // 연결 rdp.Connect(); await Task.Delay(100); }); }
// [Method] 원격서버 연결 private void ExecuteConnect(RdpHost host) { if (host == null) { return; } CreateRdpClient(host); }
// [Method] 원격서버 삭제하기 private void ExecuteDelete(RdpHost host) { if (host == null) { return; } Util.Instance.RemoveHost(host); HostList = new ObservableCollection <RdpHost>(Util.Instance.HostList); }
// [Method] 원격서버 연결 끊기 private void ExecuteDisconnect(RdpHost host) { if (host == null) { return; } var key = host.Server.Replace(".", ""); if (rdpConnects.ContainsKey(key)) { var find = rdpConnects[key]; find.Close(); find.Dispose(); } }
// [Method] 원격서버 추가, 수정 private async void ExecuteAdd(RdpHost host) { var view = new RdpHostDialog(); var viewmodel = view.DataContext as RdpHostDialogViewModel; viewmodel.Host = host; var result = await DialogHost.Show(view, "RootDialog", (object s, DialogClosingEventArgs e) => { if (e.Parameter == null) { return; } var rdpHost = e.Parameter as RdpHost; Util.Instance.AddHost(rdpHost); HostList = new ObservableCollection <RdpHost>(Util.Instance.HostList); }); }