遠程桌面連接工具

来源:https://www.cnblogs.com/zhangwc/archive/2018/05/30/9110589.html
-Advertisement-
Play Games

1、註冊控制項:regsvr32 C:\Windows\System32\mstscax.dll。 2、添加RDP Control控制項到工具箱中。我選擇的RDP Client Control (redistributable) - version 9 3、在VS項目中引用C:\Windows\Syst ...


1、註冊控制項:regsvr32 C:\Windows\System32\mstscax.dll。

2、添加RDP Control控制項到工具箱中。我選擇的RDP Client Control (redistributable) - version 9

 

3、在VS項目中引用C:\Windows\System32\mstscax.dll

 4、RdpTabPage類

using System;
using System.Windows.Forms;

namespace RdpClient
{
    public class RdpTabPage : TabPage
    {
        AxMSTSCLib.AxMsRdpClient9 rdpc = null;
        protected override void OnCreateControl()
        {
            rdpc = new AxMSTSCLib.AxMsRdpClient9();
            rdpc.OnDisconnected += new AxMSTSCLib.IMsTscAxEvents_OnDisconnectedEventHandler(rdpc_OnDisconnected);
            this.Controls.Add(rdpc);
            rdpc.Dock = DockStyle.Fill;
            base.OnCreateControl();
        }

        void rdpc_OnDisconnected(object sender, AxMSTSCLib.IMsTscAxEvents_OnDisconnectedEvent e)
        {
            ((TabControl)this.Parent).TabPages.Remove(this);
        }

        public void Disconnect()
        {
            try
            {
                if (rdpc.Connected == 1)
                {
                    rdpc.Disconnect();
                }
            }
            catch (Exception) { }
        }

        private void SetRdpClientProperties(RdpInfo info)
        {
            rdpc.Server = info.MachineName;
            rdpc.UserName = info.UserName;
            rdpc.Domain = "";
            rdpc.AdvancedSettings9.RDPPort = info.RdpPort;
            rdpc.AdvancedSettings9.ClearTextPassword = info.Password;
            rdpc.AdvancedSettings9.RedirectDrives = true;
            rdpc.AdvancedSettings9.RedirectPrinters = true;
            rdpc.AdvancedSettings9.RedirectSmartCards = true;
            rdpc.AdvancedSettings9.ConnectToServerConsole = true;
            rdpc.ColorDepth = 32;
            rdpc.Dock = DockStyle.Fill;
        }

        public void Connect(RdpInfo info)
        {
            SetRdpClientProperties(info);
            rdpc.Connect();
        }
    }
}

5、主窗體

using System;
using System.Windows.Forms;

namespace RdpClient
{
    public partial class Form_Main : Form
    {
        #region 構造
        public Form_Main()
        {
            InitializeComponent();
        }
        #endregion

        #region 方法
        /// <summary>
        /// 綁定遠程桌面列表
        /// </summary>
        private void BindMenuItem()
        {
            tsb_Rdps.DropDownItems.Clear();
            if (Config.RdpInfos == null) return;

            foreach (var info in Config.RdpInfos.Items)
            {
                ToolStripMenuItem item = new ToolStripMenuItem();
                item.ImageScaling = ToolStripItemImageScaling.SizeToFit;
                item.Name = string.Format("MenuItem{0}", info.AliasName);
                item.Text = info.AliasName;
                item.Tag = info;
                tsb_Rdps.DropDownItems.Add(item);
            }
        }

        public void RdpConnect(RdpInfo info)
        {
            RdpTabPage rdpTab = new RdpTabPage();
            rdpTab.Text = info.AliasName;

            foreach (TabPage tp in tab_Rdps.TabPages)
            {
                if (tp.Text == rdpTab.Text)
                {
                    tab_Rdps.SelectTab(tp);
                    return;
                }
            }

            tab_Rdps.TabPages.Add(rdpTab);
            rdpTab.Connect(info);
            tab_Rdps.SelectTab(rdpTab);
        }
        #endregion

        #region 事件
        private void Form_Main_Load(object sender, EventArgs e)
        {
            Config.Load();
            BindMenuItem();
        }
        private void Form_Main_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("確定退出程式?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
            {
                e.Cancel = true;
                return;
            }
        }

        /// <summary>
        /// 連接遠程桌面
        /// </summary>
        private void tsb_Rdps_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            RdpInfo item = e.ClickedItem.Tag as RdpInfo;
            if (item == null) return;

            RdpConnect(item);
        }

        /// <summary>
        /// 關閉當前Tab頁的遠程桌面
        /// </summary>
        private void tsb_Disconnect_Click(object sender, EventArgs e)
        {
            if (tab_Rdps.SelectedIndex < 0) return;

            RdpTabPage rdpTab = (RdpTabPage)tab_Rdps.SelectedTab;
            if (rdpTab != null)
            {
                rdpTab.Disconnect();
            }
        }

        /// <summary>
        /// 關閉所有Tab頁的遠程桌面
        /// </summary>
        private void tsb_DisconnectAll_Click(object sender, EventArgs e)
        {
            foreach (TabPage tab in tab_Rdps.TabPages)
            {
                RdpTabPage rdpTab = (RdpTabPage)tab;
                rdpTab.Disconnect();
            }
        }

        /// <summary>
        /// 最大化
        /// </summary>
        private void tsb_Max_Click(object sender, EventArgs e)
        {
            if (tab_Rdps.SelectedIndex < 0) return;

            RdpTabPage rdpTab = (RdpTabPage)tab_Rdps.SelectedTab;
            if (rdpTab != null)
            {
                var rdpc = rdpTab.Controls[0] as AxMSTSCLib.AxMsRdpClient9;
                rdpc.FullScreen = true;
                rdpc.FullScreenTitle = rdpTab.Text;
            }
        }

        private void tsb_Config_Click(object sender, EventArgs e)
        {
            Form_Settings form = new Form_Settings();
            if (form.ShowDialog() == DialogResult.OK)
            {
                BindMenuItem();
            }
        }

        private void tsb_About_Click(object sender, EventArgs e)
        {
            MessageBox.Show("遠程桌面", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        #endregion
    }
}

6、程式下載地址

https://pan.baidu.com/s/1Fcolic2QAcNANJszscVUjg

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • /// /// 加密指定區塊 /// private void EncryptWebConfigByDPAPI() { Configuration configuration = null; ConfigurationSection connectionSection = null; //打開Req... ...
  • 在經過了上面篇文章的學習之後,本篇文章我們來學習如何使用 Entity Framework Code First 遷移功能將新欄位添加到模型,並且同時將新欄位添加到資料庫中。 使用 EF Code First 自動創建資料庫時,Code First 會向資料庫添加一個表,以... ...
  • 一個小插曲,最近研究 netcore 微服務網關,在使用AddStoreOcelotConfigurationInConsul將配置存到consul後,任何經過網關的請求都出現404,並且沒有任何有用的異常信息列印。這裡先簡單講講這個問題是如何發生的,及如何解決。 之前在 ASP.NET Core ...
  • 前臺頁面提交文件 <!DOCTYPE html> <html><head> <meta name="viewport" content="width=device-width" /> <title>文件操作</title></head><body> <form id="upFileForm"> <d ...
  • 今天看微軟的一個Samples,發現一個蠻好玩的背景樣式,如下圖所示: 風格比較卡哇伊。 純的XAML代碼,窗體載入時,啟動動畫。 ...
  • 值類型還有引用類型?結構還是類? 值類型在記憶體管理上有很好的性能,很少會有堆記憶體碎片,很少間接訪問。但是值類型在面向對象技術上的支持是有限的。 把值類型當作一個底層次的數據存儲類型,把應用程式的行為用引用類型來表示。 ...
  • 使用#if #endif可以在同樣源碼上生成不同的編輯(結果),通常是調式(debug)和發佈(release)版本。 但是#if/#endif很容易被濫用,使得編寫的代碼難以理解和調式,所以C#提供了條件特性(Conditional attribute)來識別哪些方法可以根據環境設置來判斷是否應該 ...
  • 無論何時,正確選擇使用as運算符進行類型轉換。比盲目的強制類型轉換更安全,而且在運行時效率更高。 用as和is進行轉換時,並不是對所有用戶定義的類型都能完成,只是在運行時類型和目標類型匹配時,轉換才能完成。 1、強制轉換是不安全的,可能有異常拋出。需要try catch 結構來保證程式運行 2、as ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...