1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C#实现局域网远程桌面连接 (浏览+控制)

C#实现局域网远程桌面连接 (浏览+控制)

时间:2021-01-15 09:32:32

相关推荐

C#实现局域网远程桌面连接 (浏览+控制)

效果图,自己共享自己的电脑,局域网内不同电脑测试也是OK的

其实客户端开始共享后,服务端只要拿到这一串字符就可以建立共享连接了。

客户端代码:

需要引用 Interop.RDPCOMAPILib.dll ,下载放在后面

public partial class 客户端 : Form{//因为后续需要将生成的共享字符串传输,先采用写入共享文件夹的形式进行传输数据。string _ip="192.168.1.9", _username="admin", _password="0000", _filepath = "shard";public 客户端(){InitializeComponent();}protected RDPSession _rdpSession = null;/// <summary>/// 开始共享/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){_rdpSession = new RDPSession(); // 新建RDP Session_rdpSession.OnAttendeeConnected += new _IRDPSessionEvents_OnAttendeeConnectedEventHandler(OnAttendeeConnected);_rdpSession.OnAttendeeDisconnected += new _IRDPSessionEvents_OnAttendeeDisconnectedEventHandler(OnAttendeeDisconnected);_rdpSession.OnControlLevelChangeRequest += new _IRDPSessionEvents_OnControlLevelChangeRequestEventHandler(OnControlLevelChangeRequest);//用户的级别//_rdpSession.SetDesktopSharedRect(0, 0, 991, 699); // 设置共享区域,如果不设置默认为整个屏幕,当然如果有多个屏幕,还是设置下主屏幕,否则,区域会很大 _rdpSession.Open();IRDPSRAPIInvitation pInvitation = _rdpSession.Invitations.CreateInvitation("WinPresenter", "PresentationGroup", "", 5);//获取连接的字符串string invitationString = pInvitation.ConnectionString;if (connectState(_ip, _username, _password))//将共享的字符串写入共享文件夹,{using (StreamWriter sw = File.CreateText(string.Format(@"\\\\{0}\\{1}\\{2}", _ip, _filepath, "inv.xml"))){sw.WriteLine(invitationString);}}textBox1.Text = invitationString;}private void OnAttendeeConnected(object pObjAttendee){IRDPSRAPIAttendee pAttendee = pObjAttendee as IRDPSRAPIAttendee;pAttendee.ControlLevel = CTRL_LEVEL.CTRL_LEVEL_VIEW;}void OnAttendeeDisconnected(object pDisconnectInfo){IRDPSRAPIAttendeeDisconnectInfo pDiscInfo = pDisconnectInfo as IRDPSRAPIAttendeeDisconnectInfo;}/// <summary>/// 更改控制级别/// </summary>/// <param name="pObjAttendee"></param>/// <param name="RequestedLevel"></param>void OnControlLevelChangeRequest(object pObjAttendee, CTRL_LEVEL RequestedLevel){IRDPSRAPIAttendee pAttendee = pObjAttendee as IRDPSRAPIAttendee;pAttendee.ControlLevel = RequestedLevel;}/// <summary>/// 结束共享/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){try{_rdpSession.Close();Marshal.ReleaseComObject(_rdpSession);_rdpSession = null;}catch (Exception ex){}}public static bool connectState(string ip, string user, string password){return connectState1("\\\\" + ip, user, password);}/// <summary>/// 连接远程共享文件夹/// </summary>/// <param name="path">远程共享文件夹的路径</param>/// <param name="userName">用户名</param>/// <param name="passWord">密码</param>/// <returns></returns>public static bool connectState1(string path, string userName, string passWord){bool Flag = false;Process proc = new Process();try{proc.StartInfo.FileName = "cmd.exe";proc.StartInfo.UseShellExecute = false;proc.StartInfo.RedirectStandardInput = true;proc.StartInfo.RedirectStandardOutput = true;proc.StartInfo.RedirectStandardError = true;proc.StartInfo.CreateNoWindow = true;proc.Start();string dosLine = "net use " + path + " " + passWord + " /user:" + userName;proc.StandardInput.WriteLine(dosLine);proc.StandardInput.WriteLine("exit");while (!proc.HasExited){proc.WaitForExit(1000);}string errormsg = proc.StandardError.ReadToEnd();proc.StandardError.Close();if (string.IsNullOrEmpty(errormsg)){Flag = true;}else{throw new Exception(errormsg);}}catch (Exception ex){throw ex;}finally{proc.Close();proc.Dispose();}return Flag;}}

服务端代码

需要先在工具箱,右键,选择项,COM组件中,添加该组件

然后将其引入到界面即可

服务器的设计器代码中,axRDPViewer1 需要修改下

// // axRDPViewer1// this.axRDPViewer1.AccessibleRole = System.Windows.Forms.AccessibleRole.None;this.axRDPViewer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));this.axRDPViewer1.Enabled = true;this.axRDPViewer1.Location = new System.Drawing.Point(30, 99);this.axRDPViewer1.Name = "axRDPViewer1";this.axRDPViewer1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axRDPViewer1.OcxState")));this.axRDPViewer1.Size = new System.Drawing.Size(1081, 562);this.axRDPViewer1.TabIndex = 0;this.axRDPViewer1.OnConnectionEstablished += new System.EventHandler(this.OnConnectionEstablished);this.axRDPViewer1.OnConnectionFailed += new System.EventHandler(this.OnConnectionFailed);this.axRDPViewer1.OnConnectionTerminated += new AxRDPCOMAPILib._IRDPSessionEvents_OnConnectionTerminatedEventHandler(this.OnConnectionTerminated);this.axRDPViewer1.OnError += new AxRDPCOMAPILib._IRDPSessionEvents_OnErrorEventHandler(this.OnError);

然后是整体服务端代码

public partial class 服务端 : Form{public 服务端(){InitializeComponent();}/// <summary>/// 开始共享仪器客户端界面/// </summary>public void Connect(){string ConnectionString = ReadFromFile();if (ConnectionString != null){try{axRDPViewer1.Connect(ConnectionString, "Viewer1", "");}catch (Exception ex){}}}/// <summary>/// 结束控制/// </summary>public void stopcontrol(){axRDPViewer1.RequestControl(RDPCOMAPILib.CTRL_LEVEL.CTRL_LEVEL_VIEW);}/// <summary>/// 开始控制/// </summary>public void control(){axRDPViewer1.RequestControl(RDPCOMAPILib.CTRL_LEVEL.CTRL_LEVEL_INTERACTIVE);}/// <summary>/// 停止共享仪器客户端界面/// </summary>public void DisConnect(){axRDPViewer1.Disconnect();}/// <summary>/// 从配置文件夹中读取/// </summary>/// <returns></returns>public string ReadFromFile(){//从共享局域网读取连接字符串string ReadText = null;try{using (StreamReader sr = File.OpenText(@"G:\shard\inv.xml")){ReadText = sr.ReadToEnd();sr.Close();}}catch (Exception ex){}return ReadText;}private void OnConnectionEstablished(object sender, EventArgs e){}private void OnError(object sender, _IRDPSessionEvents_OnErrorEvent e){int ErrorCode = (int)e.errorInfo;}private void OnConnectionTerminated(object sender, _IRDPSessionEvents_OnConnectionTerminatedEvent e){//SaveErrMessage.SaveMessage("共享结束");}private void OnConnectionFailed(object sender, EventArgs e){}//连接private void button1_Click(object sender, EventArgs e){Connect();}//控制private void button2_Click(object sender, EventArgs e){control();}}

Interop.RDPCOMAPILib.dll 网盘下载地址

链接:/s/1TdXeKg7iGqSaQ0b7XM-4-g

提取码:l52e

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。