zoukankan      html  css  js  c++  java
  • c#实现windows远程桌面连接程序

    c#实现windows远程桌面连接程序

    使用winform制作windows远程桌面连接程序,windows自带了远程桌面连接,我们需要将远程桌面连接集成
    到自己的winform程序,并实现管理远程主机的配置。

    远程桌面核心类库

    windows系统自带了远程桌面activex dll,目录:
    c:WindowsSystem32mstscax.dll
    此类库无法使用c#直接调用,介绍一个工具AxImp.exe

    AxImp.exe

    https://msdn.microsoft.com/zh-cn/library/8ccdh774(VS.80).aspx
    ActiveX 控件导入程序将 ActiveX 控件的 COM 类型库中的类型定义转换为 Windows 窗体控件。

    控件转换

    在cmd输入以下命令
    "c:Program Files (x86)Microsoft SDKsWindowsv7.0ABinAxImp.exe" "c:WindowsSystem32mstscax.dll"
    即可生成AxMSTSCLib.dll,MSTSCLib.dll

    远程桌面连接核心代码

    //远程连接核心方法
    private AxMSTSCLib.AxMsRdpClient7 rdpc = null;
    protected void OnCreateControl()
    {
        rdpc = new AxMSTSCLib.AxMsRdpClient7();
        rdpc.OnDisconnected += new AxMSTSCLib.IMsTscAxEvents_OnDisconnectedEventHandler(rdpc_OnDisconnected);
        this.Controls.Add(rdpc);
        rdpc.Dock = DockStyle.Fill;
        rdpc.BringToFront();
    }
    
    void rdpc_OnDisconnected(object sender, AxMSTSCLib.IMsTscAxEvents_OnDisconnectedEvent e)
    {
       //处理断开连接
    }
    
    
    public void Disconnect()
    {
        try
        {
            if (rdpc.Connected == 1)
            {
                rdpc.Disconnect();
            }
        }
        catch (Exception)
        {
    
        }
    
    }
    
    private void SetRdpClientProperties(Machine parMachine)
    {
        rdpc.Server = parMachine.MachineName;
        rdpc.AdvancedSettings2.RDPPort = parMachine.Port;
        rdpc.UserName = parMachine.UserName;
        rdpc.Domain = parMachine.DomainName;
        if (parMachine.Password != "")
        {
            rdpc.AdvancedSettings5.ClearTextPassword = parMachine.Password;
        }
        rdpc.AdvancedSettings5.RedirectDrives = parMachine.ShareDiskDrives;
        rdpc.AdvancedSettings5.RedirectPrinters = parMachine.SharePrinters;
        rdpc.ColorDepth = (int)parMachine.ColorDepth;
    }
    
    public void Connect(Machine parMachine)
    {
        SetRdpClientProperties(parMachine);
        rdpc.Connect();
    }
    
    //远程主机配置
    [Serializable()]
    public class Machine
    {
        private string _RemoteDesktopConnectionName;
        public string RemoteDesktopConnectionName
        {
            get { return _RemoteDesktopConnectionName; }
            set { _RemoteDesktopConnectionName = value; }
        }
    
        private string _MachineName;
        public string MachineName
        {
            get { return _MachineName; }
            set { _MachineName = value; }
        }
        private string _DomainName;
        public string DomainName
        {
            get { return _DomainName; }
            set { _DomainName = value; }
        }
    
        private string _UserName;
        public string UserName
        {
            get { return _UserName; }
            set { _UserName = value; }
        }
    
        private string _Password;
        public string Password
        {
            get { return _Password; }
            set { _Password = value; }
        }
    
        private bool _AutoConnect;
        public bool AutoConnect
        {
            get { return _AutoConnect; }
            set { _AutoConnect = value; }
        }
    
        private bool _ShareDiskDrives;
        public bool ShareDiskDrives
        {
            get { return _ShareDiskDrives; }
            set { _ShareDiskDrives = value; }
        }
    
        private bool _SharePrinters;
        public bool SharePrinters
        {
            get { return _SharePrinters; }
            set { _SharePrinters = value; }
        }
    
        private bool _SavePassword;
        public bool SavePassword
        {
            get { return _SavePassword; }
            set { _SavePassword = value; }
        }
    
        private Colors _ColorDepth;
        public Colors ColorDepth
        {
            get { return _ColorDepth; }
            set { _ColorDepth = value; }
        }
    
        public int Port
        {
            get
            {
                return _Port;
            }
    
            set
            {
                _Port = value;
            }
        }
    
        private int _Port;
    
    
        public enum Colors
        {
            HighColor15 = 15,
            HighColor16 = 16,
            Color256 = 8,
            TrueColor = 24
        }
    }
    

    推荐开源实现

    Palantir - Remote Desktop Manager
    https://www.codeproject.com/Articles/19836/Palantir-Remote-Desktop-Manager

    享受生活+创造
  • 相关阅读:
    十分钟了解HTTPS协议
    浅谈程序员的学历
    浅谈前后模板引擎的利与弊
    简单理解预加载技术
    简单理解懒加载技术
    C#.NET里面抽象类和接口有什么区别
    Select count(*)、Count(1)、Count(0)的区别和执行效率比较
    c#中decimal ,double,float的区别
    C#使用log4net记录日志
    SQLServer无法打开用户默认数据库 登录失败错误4064的解决方法
  • 原文地址:https://www.cnblogs.com/theLife/p/6838745.html
Copyright © 2011-2022 走看看