实例介绍
【实例简介】
C#实现远程桌面连接
【实例截图】
【核心代码】
using System; using System.Drawing; using System.Windows.Forms; namespace MultiRemoteDesktopClient { public partial class RemoteDesktopClient : Form { private int _lastPanelWidth = 0; private int _selIndex = 0; public RemoteDesktopClient(string[] args) { InitializeComponent(); InitializeControl(); InitializeControlEvents(); } public void InitializeControl() { this.m_View_SLIV_Details.Tag = View.Details; this.m_View_SLIV_Tile.Tag = View.Tile; this.toolbar_SLIV_Details.Tag = View.Details; this.toolbar_SLIV_Tile.Tag = View.Tile; GlobalHelper.infoWin.EnableInformationWindow = true; GlobalHelper.infoWin.AddControl(new object[] { this.lvServerLists, this.tabMDIChild, this.toolbar_EditSettings }); lvServerLists.AddControlForEmptyListItem(new object[] { toolbar_DeleteClient, toolbar_EditSettings, m_Edit_DeleteClient, m_File_EditSettings }); lvServerLists.AddControlForItemSelection(new object[] { toolbar_DeleteClient, toolbar_EditSettings, m_Edit_DeleteClient, m_File_EditSettings, lvServerListsContextMenu_DeleteClient, lvServerListsContextMenu_EditClientSettings }); this._lastPanelWidth = this.panelServerLists.Width; } public void InitializeControlEvents() { this.Shown = new EventHandler(RemoteDesktopClient_Shown); this.lvServerListsContextMenu_NewClient.Click = new EventHandler(ShowNewForm); this.lvServerListsContextMenu_DeleteClient.Click = new EventHandler(btnDelete_Click); this.lvServerListsContextMenu_EditClientSettings.Click = new EventHandler(OpenSettingsWindow); this.lvServerLists.ItemSelectionChanged = new ListViewItemSelectionChangedEventHandler(lvServerLists_ItemSelectionChanged); this.lvServerLists.DoubleClick = new EventHandler(lvServerLists_DoubleClick); this.lvServerLists.MouseDown = new MouseEventHandler(lvServerLists_MouseDown); //by http://bbs.cskin.net // server list context menu this.m_Edit_DeleteClient.Click = new EventHandler(btnDelete_Click); this.m_Edit_DeleteClient.Click = new EventHandler(btnDelete_Click); this.toolbar_DisconnectAll.Click = new EventHandler(btnDCAll_Click); this.toolbar_DeleteClient.Click = new EventHandler(btnDelete_Click); this.toolbar_ImportRDP.Click = new EventHandler(ImportExportRDPFile_Button_Click); this.toolbar_ExportRDP.Click = new EventHandler(ImportExportRDPFile_Button_Click); this.m_File_ImportRDP.Click = new EventHandler(ImportExportRDPFile_Button_Click); this.m_File_ExportRDP.Click = new EventHandler(ImportExportRDPFile_Button_Click); this.m_Help_About.Click = new EventHandler(aboutToolStripMenuItem_Click); this.btnHideServerLists.Click = new EventHandler(btnHideServerLists_Click); this.tsb_ServerLists.Click = new EventHandler(tsb_ServerLists_Click); this.m_View_SLIV_Details.Click = new EventHandler(IconViews); this.m_View_SLIV_Tile.Click = new EventHandler(IconViews); this.toolbar_SLIV_Details.Click = new EventHandler(IconViews); this.toolbar_SLIV_Tile.Click = new EventHandler(IconViews); this.tabMDIChild.SelectionChanged = new EventHandler(tabMDIChild_SelectionChanged); this.tabMDIChild.ClosePressed = new EventHandler(tabMDIChild_ClosePressed); } protected override void WndProc(ref Message m) { if (m.Msg == NativeMethods.WM_SHOWME) { ShowMe(); } try // cannot access a disposed object { base.WndProc(ref m); } catch (Exception ex) { // exception occurs sometimes ?? } } #region RDP Client Window Events void clientWin_ServerSettingsChanged(object sender, Database.ServerDetails sd, int ListIndex) { ListViewItem item = lvServerLists.Items[ListIndex]; if (item != null) { item.Text = sd.ServerName; item.SubItems[1].Text = sd.Server; item.SubItems[2].Text = sd.Description; item.Tag = sd; } } void clientWin_OnFormShown(object sender, EventArgs e, int ListIndex, IntPtr Handle) { RdpClientWindow rcw = (RdpClientWindow)sender; Crownwood.Magic.Controls.TabPage tabMDI = new Crownwood.Magic.Controls.TabPage(); //(rcw.Text, rcw.toolStrip1); tabMDI.Title = lvServerLists.Items[ListIndex].Text; tabMDI.ImageIndex = 0; tabMDI.Tag = rcw.Handle; rcw = null; tabMDI.Selected = true; tabMDIChild.TabPages.Add(tabMDI); } void clientWin_OnFormClosing(object sender, FormClosingEventArgs e, int ListIndex, IntPtr Handle) { lvServerLists.Items[ListIndex].ImageIndex = 1; foreach (Crownwood.Magic.Controls.TabPage tabMDI in tabMDIChild.TabPages) { if ((IntPtr)tabMDI.Tag == Handle) { tabMDIChild.TabPages.Remove(tabMDI); break; } } } void clientWin_OnFormActivated(object sender, EventArgs e, int ListIndex, IntPtr Handle) { foreach (Crownwood.Magic.Controls.TabPage tabMDI in tabMDIChild.TabPages) { if ((IntPtr)tabMDI.Tag == Handle) { tabMDI.Selected = true; break; } } } void clientWin_Disconnected(object sender, AxMSTSCLib.IMsTscAxEvents_OnDisconnectedEvent e, int ListIndex) { lvServerLists.Items[ListIndex].ImageIndex = 1; } void clientWin_Connected(object sender, EventArgs e, int ListIndex) { //lvServerLists.Items[ListIndex].ImageIndex = 0; } void clientWin_LoginComplete(object sender, EventArgs e, int ListIndex) { lvServerLists.Items[ListIndex].ImageIndex = 0; } void clientWin_Connecting(object sender, EventArgs e, int ListIndex) { lvServerLists.Items[ListIndex].ImageIndex = 2; } #endregion #region default control events void RemoteDesktopClient_Shown(object sender, EventArgs e) { GetServerLists(); } #region server lists void lvServerLists_DoubleClick(object sender, EventArgs e) { Database.ServerDetails sd = (Database.ServerDetails)lvServerLists.Items[this._selIndex].Tag; bool canCreateNewForm = true; string formTitlePattern = "Remote Desktop Client - {0}@{1}[{2}]"; string formTitle = string.Format(formTitlePattern, sd.Username, sd.ServerName, sd.Server); foreach (Form f in this.MdiChildren) { if (f.Text == formTitle) { f.Activate(); canCreateNewForm = false; break; } } if (canCreateNewForm) { RdpClientWindow clientWin = new RdpClientWindow(sd); clientWin.Connected = new Connected(clientWin_Connected); clientWin.Connecting = new Connecting(clientWin_Connecting); clientWin.LoginComplete = new LoginComplete(clientWin_LoginComplete); clientWin.Disconnected = new Disconnected(clientWin_Disconnected); clientWin.OnFormShown = new OnFormShown(clientWin_OnFormShown); clientWin.OnFormClosing = new OnFormClosing(clientWin_OnFormClosing); clientWin.OnFormActivated = new OnFormActivated(clientWin_OnFormActivated); clientWin.ServerSettingsChanged = new ServerSettingsChanged(clientWin_ServerSettingsChanged); clientWin.Text = formTitle; clientWin.MdiParent = this; clientWin.ListIndex = this._selIndex; clientWin.Show(); clientWin.Connect(); clientWin.Visible = true; } } void lvServerLists_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { this._selIndex = e.ItemIndex; } void lvServerLists_MouseDown(object sender, MouseEventArgs e) { ListViewHitTestInfo lvhi = lvServerLists.HitTest(new Point(e.X, e.Y)); if (lvhi.Item != null) { Database.ServerDetails sd = (Database.ServerDetails)lvhi.Item.Tag; status_TextStatus.Text = sd.ServerName " - " sd.Server; } else { status_TextStatus.Text = string.Empty; } } void IconViews(object sender, EventArgs e) { this.lvServerLists.View = (View)((ToolStripMenuItem)sender).Tag; m_View_SLIV.Image = ((ToolStripMenuItem)sender).Image; toolbar_SLIV.Image = ((ToolStripMenuItem)sender).Image; } #endregion #region common toolbar button events and also contains ServerSettingsWindow events private void ShowNewForm(object sender, EventArgs e) { ServerSettingsWindow ssw = new ServerSettingsWindow(); ssw.ShowDialog(); GetServerLists(); } void btnDelete_Click(object sender, EventArgs e) { Database.ServerDetails sd = (Database.ServerDetails)lvServerLists.Items[this._selIndex].Tag; DialogResult dr = MessageBox.Show("Are you sure you want to delete this server " sd.ServerName " from the server list", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dr == DialogResult.Yes) { GlobalHelper.dbServers.DeleteByID(sd.UID); GetServerLists(); } } private void OpenSettingsWindow(object sender, EventArgs e) { Database.ServerDetails sd = (Database.ServerDetails)lvServerLists.Items[this._selIndex].Tag; ServerSettingsWindow ssw = new ServerSettingsWindow(sd); ssw.ApplySettings = new ApplySettings(ssw_ApplySettings); ssw.GetClientWindowSize = new GetClientWindowSize(ssw_GetClientWindowSize); ssw.ShowDialog(); GetServerLists(); } #region settings window event (check private void OpenSettingsWindow(object sender, EventArgs e) event) Rectangle ssw_GetClientWindowSize() { Database.ServerDetails sd = (Database.ServerDetails)lvServerLists.Items[this._selIndex].Tag; RdpClientWindow rdpClientWin = GetClientWindowByTitleParams(sd.Username, sd.ServerName, sd.Server); if (rdpClientWin != null) { return rdpClientWin.rdpClient.RectangleToScreen(rdpClientWin.rdpClient.ClientRectangle); } else { MessageBox.Show("The relative RDP Client Window for this server does not exists.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Rectangle r = new Rectangle(0, 0, sd.DesktopWidth, sd.DesktopHeight); return r; } } void ssw_ApplySettings(object sender, Database.ServerDetails sd) { RdpClientWindow rdpClientWin = GetClientWindowByTitleParams(sd.Username, sd.ServerName, sd.Server); if (rdpClientWin != null) { rdpClientWin._sd = sd; rdpClientWin.Reconnect(true, false, false); } else { MessageBox.Show("The relative RDP Client Window for this server does not exists.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } #endregion void btnDCAll_Click(object sender, EventArgs e) { DisconnectAll(); } void ImportExportRDPFile_Button_Click(object sender, EventArgs e) { if (sender == toolbar_ImportRDP || sender == m_File_ImportRDP) { ImportWindow iw = new ImportWindow(); iw.ShowDialog(); GetServerLists(); } else if (sender == toolbar_ExportRDP || sender == m_File_ExportRDP) { ExportWindow ew = new ExportWindow(ref this.lvServerLists); ew.ShowDialog(); } } #endregion #region show/hide toolbar and stats events private void ToolBarToolStripMenuItem_Click(object sender, EventArgs e) { toolStrip.Visible = toolBarToolStripMenuItem.Checked; } private void StatusBarToolStripMenuItem_Click(object sender, EventArgs e) { statusStrip.Visible = statusBarToolStripMenuItem.Checked; } #endregion #region client window layout private void LayoutMdi_Click(object sender, EventArgs e) { ToolStripMenuItem mItem = (ToolStripMenuItem)sender; LayoutMdi((MdiLayout)int.Parse(mItem.Tag.ToString())); } private void CloseAllToolStripMenuItem_Click(object sender, EventArgs e) { foreach (Form childForm in MdiChildren) { childForm.Close(); } } #endregion void aboutToolStripMenuItem_Click(object sender, EventArgs e) { AboutWindow aw = new AboutWindow(); aw.ShowDialog(); } private void ExitToolsStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } void btnHideServerLists_Click(object sender, EventArgs e) { this._lastPanelWidth = this.panelServerLists.Width; // RDPClient Control workaround // lost its focus whenever we programatically resize the "panelServerLists" // and clicking on the rdp client control won't work as if it was disabled. // - // Activating the RDP Client Control inside the RDPClientWindow won't either work. this.panelServerLists.Enabled = false; this.panelServerLists.Width = 0; } void tsb_ServerLists_Click(object sender, EventArgs e) { this.panelServerLists.Width = this._lastPanelWidth; this.panelServerLists.Enabled = true; } void tabMDIChild_SelectionChanged(object sender, EventArgs e) { if (tabMDIChild.SelectedTab == null) { return; } foreach (Form f in this.MdiChildren) { if ((IntPtr)tabMDIChild.SelectedTab.Tag == f.Handle) { f.Activate(); break; } } } void tabMDIChild_ClosePressed(object sender, EventArgs e) { this.ActiveMdiChild.Close(); } #endregion #region methods public void GetServerLists() { Database.Servers s = new Database.Servers(); s.Read(); lvServerLists.Items.Clear(); foreach (Database.ServerDetails sd in s.ArrayListServers) { ListViewItem item = new ListViewItem(sd.ServerName); item.SubItems.Add(sd.Server); item.SubItems.Add(sd.Description); item.ImageIndex = 1; item.Tag = sd; lvServerLists.Items.Add(item); } } public RdpClientWindow GetClientWindowByTitleParams(params object[] args) { RdpClientWindow ret = null; string formTitlePattern = "Remote Desktop Client - {0}@{1}[{2}]"; string formTitle = string.Format(formTitlePattern, args); foreach (RdpClientWindow f in this.MdiChildren) { if (f.Text == formTitle) { ret = f; } } return ret; } void DisconnectAll() { foreach (RdpClientWindow f in this.MdiChildren) { f.Disconnect(); } } private void ShowMe() { if (WindowState == FormWindowState.Minimized) { WindowState = FormWindowState.Normal; } // get our current "TopMost" value (ours will always be false though) bool top = TopMost; // make our form jump to the top of everything TopMost = true; // set it back to whatever it was TopMost = top; } #endregion } }
好例子网口号:伸出你的我的手 — 分享!
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)
支持(0) 盖楼(回复)