.NET编程——利用C#实现远程桌面连接(WinForm)

2023-05-16

通过学习利用利用C#实现登录功能后,本文将通过Visual Studio 2019运行实现远程桌面连接。


目录

引言

前期准备

连接固定计算机

连接指定计算机

可能遇到的问题


引言

实现远程桌面有一个大前提是不可忽略的,那就是所连接的计算机与本机应该要处于同一局域网下,简单来说就要连接同一个WiFi,或者网线连接在同一个路由器/交换机上,本文提出利用C#实现远程桌面连接的方法可以扩展修改,以下提供两种思路进行实现:

方案1:桌面双击即可连接固定计算机

方案2:实现Windows系统远程桌面连接功能即可连接指定计算机


前期准备

远程桌面中的计算机需要打开指定选项,否则会无法连接,具体操作步骤如下:

Step1 打开此电脑的属性面板并选择远程桌面

Step2 启动远程桌面

Step3 连接局域网

<简单来说就要连接同一个WiFi或者网线连接在同一个路由器/交换机上>


连接固定计算机

1.程序框架

UserForm窗体负责指定远程的计算机,MainForm窗体负责显示远程桌面。

2.窗体设计

可显示远程桌面。

其中axMsRDPClient控件用于显示远程桌面,添加步骤如下:

在工具箱中添加Microsoft RDP Client Control - version12控件,具体方式可参考另一篇博客VisionPro二次开发中的前期准备部分有详细介绍:

3.程序设计 

 Step1 连接远程桌面并全屏显示

/* 当打开窗体时运行 */
        private void MainForm_Load(object sender, EventArgs e)
        {
            try
            {
                this.Height = Screen.PrimaryScreen.Bounds.Height;  //获取屏幕分辨率
                this.Width = Screen.PrimaryScreen.Bounds.Width;
                IMsTscNonScriptable securd = (IMsTscNonScriptable)axMsRDPClient.GetOcx();
                axMsRDPClient.UserName = "ADLINK";  //远程桌面用户名
                securd.ClearTextPassword = "1";  //远程桌面密码
                /// 等价于axMsRDPClient.AdvancedSettings7.ClearTextPassword = "1";  //远程桌面密码
                axMsRDPClient.Server = "192.168.250.88";  //远程桌面计算机名或IP
                axMsRDPClient.AdvancedSettings7.RDPPort = 3389;  //远程桌面服务器端口号默认为3389
                /// 此电脑需要与被远程电脑在同一局域网下
                axMsRDPClient.FullScreen = true;  //控件全屏显示
                axMsRDPClient.AdvancedSettings9.SmartSizing = true;  //控件随窗体自适应变化
                axMsRDPClient.AdvancedSettings9.NegotiateSecurityLayer = true;  //安全检查
                axMsRDPClient.AdvancedSettings7.EnableCredSspSupport = true;  //允许连接Win11系统
                axMsRDPClient.ColorDepth = 64;  //显示色彩位数
                /// 颜色位数可选 8,16,24,32,64等等,网络条件不好建议选择较低的色彩位数保证远程控制的流畅性
                axMsRDPClient.Connect();  //连接远程桌面
            }
            catch (Exception ex)  //异常捕获
            {
                MessageBox.Show(ex.ToString());
            }
        }

axMsRDPClient.UserName = "ADLINK";  //远程桌面用户名

securd.ClearTextPassword = "1";  //远程桌面密码

该段代码确认了远程桌面的用户名与密码,读者可根据实际情况进行修改;

axMsRDPClient.Server = "192.168.250.88";  //远程桌面计算机名或IP
axMsRDPClient.AdvancedSettings7.RDPPort = 3389;  //远程桌面服务器端口号默认为3389

该段代码确认了远程桌面的计算机名与端口号,不建议修改默认端口号,读者可根据实际情况进行抉择;

Step2 当窗体最大化时全屏显示远程桌面且关闭远程桌面时结束进程

/* 当窗体尺寸发生改变时运行 */
        private void MainForm_Resize(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Maximized)  //窗体尺寸为最大化时
            {
                axMsRDPClient.FullScreen = true;  //控件全屏显示
            }
        }
/* 当远程桌面控件关闭时运行 */
        private void axMsRDPClient_OnDisconnected(object sender, AxMSTSCLib.IMsTscAxEvents_OnDisconnectedEvent e)
        {
            this.Hide();  //隐藏此窗体
            System.Environment.Exit(0);  //进程结束
        }

Step3 生成解决方案Release

Step4 发送快捷方式至桌面

 <可根据个人喜好将快捷方式自定义后续双击即可连接指定计算机>

例如可以将快捷方式命名为计算机名等等并指定一个有辨识度的图标


连接指定计算机

1.程序框架

UserForm窗体负责指定远程的计算机,MainForm窗体负责显示远程桌面。

2.窗体设计

2.1 UserForm窗体

可显示运行远程桌面连接图片信息,输入计算机名、用户名和密码后点击即可连接。

其中PictureBox控件用于显示运行远程桌面连接图片,TabelLayoutPanel控件用于调整窗体控件的布局,具体可看C#控件自适应布局。 

2.2 MainForm窗体 

可显示远程桌面。

其中axMsRDPClient控件用于显示远程桌面,添加步骤如下:

在工具箱中添加Microsoft RDP Client Control - version12控件,具体方式可参考另一篇博客VisionPro二次开发中的前期准备部分有详细介绍:

3.程序设计 

3.1UserForm窗体代码

Step1 显示运行远程桌面连接图片至PictureBox控件中

/* 当打开窗体时运行 */
        private void UserForm_Load(object sender, EventArgs e)
        {
            string strPic = "D:\\Code\\csharp\\RemoteConn\\jpg\\user.png";  //图片保存路径
            Bitmap picture = new Bitmap(strPic);  //实例化Bitmap类并初始化
            pictureBox.Image = picture;  //控件显示图片
        }

其中下图保存路径为:D:\Code\csharp\RemoteConn\jpg\user.png,根据读者实际进行修改。

 

Step2 点击连接按键后打开主窗体

/* 当点击连接按键时运行 */
        private void btnConnect_Click(object sender, EventArgs e)
        {
            User user = new User(computerNameTextBox.Text.ToString(), userNameTextBox.Text.ToString(), passwordTextBox.Text.ToString());  //实例化User类并用控件值初始化
            MainForm mainForm = new MainForm(user);  //创建主窗体并传入参数
            mainForm.Show();  //显示主窗体
            this.Hide();  //隐藏此窗体
        }

其中User类定义如下,存储了计算机名、用户名和密码:

public class User  //创建User类
{
    public string strComputerName;  //计算机名
    public string strUserName;  //用户名
    public string strPassword;  //密码
    public User(string tempCName,string tempUName,string tempPassword)  //构造函数
    {
        strComputerName = tempCName;
        strUserName = tempUName;
        strPassword = tempPassword;
    }
}

3.2MainForm窗体代码

Step1 跨窗口传入User参数

public MainForm(UserForm.User tempUser)
{
    /* 跨窗口传入参数 */
    user = tempUser;  //变量赋值
    InitializeComponent();
}

Step2 连接远程桌面并全屏显示

/* 当打开窗体时运行 */
        private void MainForm_Load(object sender, EventArgs e)
        {
            try
            {
                this.Height = Screen.PrimaryScreen.Bounds.Height;  //获取屏幕分辨率
                this.Width = Screen.PrimaryScreen.Bounds.Width;
                IMsTscNonScriptable securd = (IMsTscNonScriptable)axMsRDPClient.GetOcx();
                axMsRDPClient.UserName = user.strUserName;  //远程桌面用户名
                securd.ClearTextPassword = user.strPassword;  //远程桌面密码
                /// 等价于axMsRDPClient.AdvancedSettings7.ClearTextPassword = user.strPassword;  //远程桌面密码
                axMsRDPClient.Server = user.strComputerName;  //远程桌面计算机名或IP
                axMsRDPClient.AdvancedSettings7.RDPPort = 3389;  //远程桌面服务器端口号默认为3389
                /// 此电脑需要与被远程电脑在同一局域网下
                axMsRDPClient.FullScreen = true;  //控件全屏显示
                axMsRDPClient.AdvancedSettings9.SmartSizing = true;  //控件随窗体自适应变化
                axMsRDPClient.AdvancedSettings9.NegotiateSecurityLayer = true;  //安全检查
                axMsRDPClient.AdvancedSettings7.EnableCredSspSupport = true;  //允许连接Win11系统
                axMsRDPClient.ColorDepth = 64;  //显示色彩位数
                /// 颜色位数可选 8,16,24,32,64等等,网络条件不好建议选择较低的色彩位数保证远程控制的流畅性
                axMsRDPClient.Connect();  //连接远程桌面
            }
            catch (Exception ex)  //异常捕获
            {
                MessageBox.Show(ex.ToString());
            }
        }

Step3 当窗体最大化时全屏显示远程桌面且关闭远程桌面时结束进程

/* 当窗体尺寸发生改变时运行 */
        private void MainForm_Resize(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Maximized)  //窗体尺寸为最大化时
            {
                axMsRDPClient.FullScreen = true;  //控件全屏显示
            }
        }
/* 当远程桌面控件关闭时运行 */
        private void axMsRDPClient_OnDisconnected(object sender, AxMSTSCLib.IMsTscAxEvents_OnDisconnectedEvent e)
        {
            this.Hide();  //隐藏此窗体
            System.Environment.Exit(0);  //进程结束
        }

4运行结果 


可能遇到的问题

1.连接后白屏一段时间自动关闭:

检查是否在同一局域网内,计算机名是否正确;

2.连接时无反应后自动关闭:

检查用户名账号与密码是否正确;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET编程——利用C#实现远程桌面连接(WinForm) 的相关文章

随机推荐

  • nano 命令

    Nano命令指南 打开文件与新建文件 使用nano打开或新建文件 xff0c 只需键入 xff1a 代码 1 1 打开或新建文件 nano 文件名 Nano是一种单模式编辑器 xff0c 你可以直接输入文字 如果你要编辑一个像 etc fs
  • 数据处理时踩坑总结【持续更新版】

    DataFrame的iterrows迭代中无法直接修改源数据 在iterrows中 xff0c 尝试使用index和row对DataFrame类型的变量直接进行更改 xff0c 但是输出时发现值没有改变 这是因为使用row 列名 修改的值是
  • 单片机串口通讯产生乱码

    64 有关串口通讯乱码 今天做了一个51单片机的proteus仿真实验 xff0c 用到串口通信 xff0c 但是无论怎么调试都是输出乱码 一般产生乱码都是因为波特率不对 xff0c 可能你所用的晶振 以及定时器T1产生的波特率 xff0c
  • Ubuntu双系统安装(一次安装成功)

    Ubuntu双系统安装主要有关键地两步 xff1a 一 制作启动硬盘 二 为Ubuntu分配磁盘空间 第二点是安装过程中非常重要的一步 制作启动硬盘 xff1a 1 下载Ubuntu LTS xff0c 可以去官网下载 2 下载UltraI
  • linux环境下,一步步教你命令行搭建自己的git服务器和客户端

    前言 xff1a 先说下我的git服务器环境 xff0c git服务端的搭建我用的是阿里的ubantu云服务器 xff0c 毕竟云服务器上可以在任何联网的电脑上访问嘛 xff0c 方便 局域网也可以 xff0c svn和git这两种最常用的
  • Windows中的WSL(子系统)开机启动配置

    常规做法 通常在Linux中开机启动可以通过 1 编辑 etc rc loacl 2 在 etc init d 下添加启动脚本 3 配置systemd 但这几种方式在子系统中无法使用 xff0c 我们可以通过Windows 间接的启动子系统
  • STM32串口控制LED灯的亮灭

    STM32中的串口控制LED灯的亮灭 xff0c 分为两种方式 xff0c 一种是直接发送数字0和1来控制灯的亮灭 xff0c 另一种是通过发送字符串来控制 我所使用的开发板主控芯片是STM32F401RET6 xff0c 主频84MHz
  • Windows使用快捷键

    Windows电脑快捷键汇总 Windows电脑快捷键汇总1 win快捷键 xff1a 2 Ctr快捷键 xff08 文本编辑使用较多 xff09 3 ALT快捷键4 shift快捷键5 FN快捷键6 常规快捷键7 指法练习 Windows
  • 基于Centos7搭建Samba服务

    准备两台安装好centos7的虚拟机 服务器端172 16 1 11 24 客户端172 16 1 12 24 root 64 server yum install samba samba client y 服务器端安装软件包 xff08
  • 【BUG】【Raspberry】解决最新版树莓派远程连接蓝/黑屏不显示问题

    文章目录 一 bug如图二 解决办法三 参考四 请教问题 一 bug如图 远程连接登陆后全蓝色 xff0c 没有树莓派桌面 二 解决办法 1 执行下面代码 xff0c 删除两个文件目录 注意 xff1a pi 替换为自己的用户名 xff01
  • 【教程】【记录】树莓派Raspberry+motion+摄像头实现拍照、录像、实时视频功能

    刚接触树莓派 xff0c 还请多多指教 目录 一 准备工作二 操作步骤1 进入设置打开摄像机模块2 拍照3 录像4 实时监控 三 总结补充文章 xff1a 一 准备工作 1 树莓派4B 2 树莓派摄像头500W像素 xff08 淘宝十几块钱
  • linux查看日志命令

    常用的几种linux查看日志的命令 一 tail n 是显示行号 xff1b 相当于nl命令 xff1b 例子如下 xff1a tail 100f localhost yyyy MM dd log 实时监控100行日志 tail n 10
  • 用c++ 的可变模板参数递归来表达 著名的斐波那契数列

    span class token macro property span class token directive keyword include span span class token string lt iostream gt s
  • debian squid透明代理简单配置

    实验环境 主机用途IP客户端10 10 100 11网关10 10 100 12 xff0c 192 168 65 160网站192 168 65 161 客户端配置 配置网关 route add default gw 10 10 100
  • Matlab中的抽象函数的求值

    Matlab中的抽象函数的求值 采用匿名函数 y 61 64 x x 2 43 2 x 8 建立匿名函数y y 4 返回当x 61 4时 xff0c y的结果 上面的命令在命令窗口可以实现 xff0c 但是在M文件中没有实现 使用matla
  • 白嫖5T空间Onedrive并搭建下载站

    更好的阅读体验欢迎访问博客白嫖5T空间Onedrive并搭建下载站 前言 白嫖一个微软E5账号不仅能自己使用office全家桶 xff0c 还能造福25个小伙伴 xff0c 何乐而不为 xff1f 这里借助onedirve的API和onei
  • 阿里云Linux(Debian) + Tomcat搭建网站

    工具 xff1a Linux 我买的是阿里云的主机Linux Debian64位的 Tomcat Java Web服务器 putty 连接远程主机的客户端 WinSCP 远程主机的可视化界面 xff0c 方便操作文件 jdk1 8 需要配置
  • 动态链接库(DLL)开发基础

    本周我的博客涉及到动态链接库的基础开发 我在刚开始学习动态链接库的开发 在网上找DLL开发基础知识教程时发现网上的资料还是太杂 xff0c 对初学者不太友好 xff0c 于是我就着手写了这篇博客 xff0c 本篇博客知识有DLL简介 DLL
  • Mybatis:使用Mybatis执行SQL多出“limit?“,原来这样就可以解决!!!

    问题展示说明 业务需要只展示分组排序后的前15条 xff0c 数据写了如下sql xff1a 启动项目访问接口后 xff0c 报如下错误 xff1a 解决办法 参考了一下MyBatis官网和其他博客发现需要清理一下之前设置过的Page缓存
  • .NET编程——利用C#实现远程桌面连接(WinForm)

    通过学习利用利用C 实现登录功能后 xff0c 本文将通过Visual Studio 2019运行实现远程桌面连接 目录 引言 前期准备 连接固定计算机 连接指定计算机 可能遇到的问题 引言 实现远程桌面有一个大前提是不可忽略的 xff0c