通过学习利用利用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.连接时无反应后自动关闭:
检查用户名账号与密码是否正确;