此次MFC的远程桌面共享端源代码地址:http://download.csdn.net/download/wochendaixin/10119977  点击打开链接

编译运行环境:win10, vs2017

调试时,注意让 共享端 和 连接端 在同一局域网中。

一、RDP远程桌面共享端

(1)准备好和RDP共享相关的调用

之前一直在纠结由c#转MFC之后,调用包装类产生的函数和MSDN有差别。在查了一片源代码后发现根本不需要去使用包装类。在我的 分享端 工程里通过直接引用一个特殊头文件即可调用那些和RDP远程共享相关的一些列成员和函数。这时,就可以对照MSDN来进行共享流程代码的编写了

#include"rdpencomapi.h"
//这个头文件就在C盘里面,具体位置可以网上查到,或者直接在C盘下查找
//找到这个头文件之后,引进你的工程
(2)共享流程代码简介
IRDPSRAPISharingSession* p_ShareSession;//这些类型都可以在MSDN查找。下面的步骤都是按照MSDN上的顺序来的
CMyRDPSessionEvents myEvents;IRDPSRAPIInvitationManager* p_InvitationManager;IRDPSRAPIInvitation* p_Invitation;HRESULT hr=CoCreateInstance(__uuidof(RDPSession),NULL,CLSCTX_ALL, __uuidof(IRDPSRAPISharingSession),reinterpret_cast<void**>(&p_ShareSession));if (FAILED(hr)) return;//{========添加事件通知。比如有 新的接入、请求控制(这里会涉及一些情况的调用,在后面(3)再说)===========IConnectionPointContainer* pConnectionPointContainer = NULL;IConnectionPoint* pConnectionPoint = NULL;unsigned long cid;//connection id, critical,use it to unadvisehr = p_ShareSession->QueryInterface(IID_IConnectionPointContainer, reinterpret_cast<void**>(&pConnectionPointContainer));if (FAILED(hr)) return;if (pConnectionPointContainer){pConnectionPointContainer->FindConnectionPoint(__uuidof(_IRDPSessionEvents), &pConnectionPoint);if (pConnectionPoint) {pConnectionPoint->Advise(&myEvents, &cid);}}//==================================================================================================}//开启共享p_ShareSession->Open();if (!p_ShareSession) return;//生成邀请字符串p_ShareSession->get_Invitations(&p_InvitationManager);hr = p_InvitationManager->CreateInvitation(B("baseAuth"),B("groupName"), B(""), 10, &p_Invitation);if (FAILED(hr))return;   BSTR bstr ;p_Invitation->get_ConnectionString(&bstr);//BSTR转char*,写入文本 或者 用socket发送_bstr_t p = bstr;char*lpszText2 = p;    ofstream out;out.open("D:\\3.xml", ios::trunc);//根据自己需要进行适当的选取if(out.is_open()){out<< lpszText2;out.close();}

(3)关于第二步骤中的一些事件通知

在我参考的那个例子中,无论是作为共享端还是作为连接端。都是需要对各种事件做出响应的。在我的工程中,只是简单处理了两个事件:

【1】当有连接者连入时,共享端要响应这个事件,并将新连入的这个连接者的级别设置为 “观看级”

【2】当连接者想要提升自己的权限时,共享端要响应这个事件,将这个连接者的级别更改为“控制级”。

当然这些响应的处理是放在单独的一个 .h和.cpp中声明定义的。即我的工程中的  MyRDPSessionEvents.h  和  MyRDPSessionEvents.cpp

在一开始我尝试过不做这些响应,也就是在(2)的步骤中舍去了虚线框画的那段代码。结果在运行时 连接端无法得到分享的画面和进行控制。我猜测可能是需要在共享端提前为连接者分配一定的权限吧。

二、连接端

连接端主要就用了一个Activex控件。

直接在MFC的对话框中,右键-》添加ActiveX控件 -》rdpviewer class.

然后,为这个新添加的控件,右键关联一个变量即可。这样就会得到一个类似:CRdpviewer1  Cm_viewer;之后的一些列操作都是用这个变量类中的方法

流程如下:

//1.从文件中读出那个共享端产生的邀请字符串
//自己定义的功能函数
string ConnectionString = readfile();//wstring  temp = s2ws(ConnectionString);//2.连接Cm_viewer.Connect(temp.c_str(), L"Viewer1",L"");//3.申请提高自己的权限为“控制”
Cm_viewer.RequestControl(CRdpviewer1::CTRL_LEVEL_INTERACTIVE);
基本就是最简单的远程共享例子了

MFC调用RDP实现远程桌面共享实例相关推荐

  1. linux系统远程工具,分享|Remmina:一个 Linux 下功能丰富的远程桌面共享工具

    Remmina 是一款在 Linux 和其他类 Unix 系统下的自由开源.功能丰富.强大的远程桌面客户端,它用 GTK+ 3 编写而成.它适用于那些需要远程访问及使用许多计算机的系统管理员和在外出行 ...

  2. Remmina:一个 Linux 下功能丰富的远程桌面共享工具

    转自 https://linux.cn/article-8493-1.html Remmina 是一款在 Linux 和其他类 Unix 系统下的自由开源.功能丰富.强大的远程桌面客户端,它用 GTK ...

  3. 计算机关闭远程桌面 共享功能,win7旗舰版系统优化禁止用远程桌面共享的解决方法...

    ‍ ‍windows7系统优化的时候,禁用远程桌面共享功能,一旦被禁用了用户就不能设置它或使用它来远程控制其计算机,遇上这种问题要怎么处理,那么接下来就一起看看win7旗舰版系统优化禁止用远程桌面共享 ...

  4. vnc远程linux命令,用VNC实现远程桌面共享(支持Windows, Linux, …) | 易水博客

    用VNC实现远程桌面共享(支持Windows, Linux, -) VNC,全称为Virtual Network Computing,它是一个桌面共享系统.它的功能,类似于windows中的远程桌面功 ...

  5. 电脑如何用rdp协议登录服务器,RDP(远程桌面协议).ppt

    RDP(远程桌面协议).ppt 第14讲 远程控制 企业需求 服务器通常放置在专用的机房中,网络管理员要管理服务器时,需要频繁进出机房,不是很方便.提供远程控制功能,使得管理员在自己的电脑上就能管理服 ...

  6. php qq远程桌面共享,新手学堂:用VNC实现远程桌面共享的方法

    VNC,全称为Virtual Network Computing,它是一个桌面共享系统.它的功能,类似于windows中的远程桌面功能.VNC使用了RFB(Remote FrameBuffer,远程帧 ...

  7. RDP(远程桌面协议)的应用-3389

    目录 一.环境 二.简要 三.RDP的操作 一.环境 Windows10 (物理机) 与 VMware下的Windows server2012 (虚拟机)其它的也行 Windows server201 ...

  8. 【Windows10】远程桌面共享多个显示屏

    起因 平时时喜欢用自己的笔记本电脑远程桌面到公司的工作电脑主机进行工作,公司分配的工作机配置方面都挺好的,主要还是喜欢用自己的笔记本敲代码.然而,有时候觉得自己笔记一个显示屏不大够用,想做屏幕扩展投影 ...

  9. php qq远程桌面共享,QQ远程桌面共享

    远程共享--通过软件和互联协议实现对远程计算机上某些功能的享用.通俗的讲,就是可以操纵对方的电脑. 由于远程协助属于窗口类的功能,所以 QQ 将其启动放在了聊天窗口工具中,点击消息模式中上方的窗口功能 ...

  10. Linux字符模式下的“远程桌面共享”及屏幕录制

    软件环境:     screen-4.0.3-1.el5     openssh-4.3p2-16.el5 util-linux-2.13-0.44.el5     util-linux-ng-2.1 ...

最新文章

  1. OpenWebSpider 安装使用
  2. 编写一个方法,数出从0到n中数字2出现了几次?
  3. [USACO19JAN]Train Tracking 2——神仙结论题+DP
  4. 【存储知识学习】第六章-磁盘阵列-《大话存储》阅读笔记
  5. jquery获取radio选中值及遍历
  6. c0000005错误怎么解决_iTunes提示3194未知错误怎么办【解决方法】
  7. solidity bytes 智能合约开发知识浅学(五点一)bytes基本概念
  8. Pi network到底怎么样?我们来深入剖析一下
  9. i5 1135g7什么水平_i7-10510U和i5-1135G7对比,该怎么选择呢?
  10. android动画效果 --- 设置activity 跳转动画
  11. 快速设置XMind中的设置联系
  12. makefile教程链接
  13. document.all用法
  14. 2021Java面经:史上最全的《Java面试题及解析》
  15. COMSOL中文指导教程全集
  16. 淘宝dsr评分如何提升?
  17. 关于Eclipse在servlet中连接数据库时出现驱动加载失败的解决
  18. operator开发流程
  19. HTML学习笔记9——CSS3制作网页动画
  20. 各个击破!高效解决游戏开发8大痛点

热门文章

  1. 每个英文名字背后的寓意,你也来起一个吧
  2. 华为荣耀手机录制视频 华为手机如何录制视频
  3. 网易公开课斯坦福大学-机器学习
  4. Simhash算法介绍和应用内容
  5. 离散数学 06.04 子群及其陪集
  6. 2016年高校保送生拟录取名单(清华大学)
  7. ERROR in Entry module not found: Error: Can‘t resolve ‘./src/index.js‘ in‘xxx.js‘
  8. [渝粤教育】陕西师范大学《教育社会学》作业
  9. 从写博到出书:过程全记录
  10. ios label 高度紫石英_iOS_NSMutableAttributedString和自适应宽度高度