由于在学校需要管理很多主机的需要,自己动手写了个3389桌面集群的软件。

软件很简单,分别用2种方式实现:

(1)快速登入模式: 微软的MsRdpClient ActiveX控件实现

(2)远程桌面模式:生成.rdp文件实现

看似很简单的过程,在实现的过程中也不是一帆风顺。不管再简单的东西,我们也要力争把它做的最好!

首先,我们分析一下需要的功能:

(1)读写主机信息的功能模块(这里我用最简单的ini)

(2)主机信息的加密解密(涉及密码之类的需要加密处理保存)

(3)主机状态在线离线检查

(4)生成rdp文件并实现登陆

(5)配置文件导入导出

接着我来分享下遇到的问题

(1)使用MSTSCAX控件,断网导致使用控件的窗体卡死

MSTSCAX控件在一定程度上方便了我们在项目中处理远程桌面,如果不细读文档则会漏掉很多微软已经为我们封装好的功能。针对控件远程过程中断网导致的窗体卡死,我们只需要关闭rdp高级设置中的自动重连功能:m_MsRdpClientAdvancedSettings.put_EnableAutoReconnect(FALSE);

其他的很多远程桌面的属性都可以在CMsRdpClientAdvancedSettings6 ,CMsRdpClientSecuredSettings2中找到。

(2)服务器信息等内容,应该如何去存储和维护

读取配置文件,将配置文件保存在 std::map<SERVER, INFO> m_mapServerInfo 结构中,每一个SEVER对应唯一INFO,这里注意对<的重写(结构体作为map的key默认无法排序)

下面是我的SERVER和INFO结构:

typedef struct _SERVER_
{CString name;CString ip;CString port;CString user;//map中key为结构体时需要重写<bool operator <(const _SERVER_& other) const{if (ip < other.ip){return true;}else if (ip == other.ip){if (port < other.port){return true;}else if (port == other.port){if (user < other.user){return true;}else if (user == other.user){return false;}}}return false;}
}SERVER, *PSERVER;typedef struct _INFO_
{CString password;CString note;
}INFO, *PINFO;

将服务器信息保存在 m_mapServerInfo中我们只需要直接对m_mapServerInfo增改删的操作,最后再写入配置文件就可以。写配置文件线程我们可以设定一个全局变量g_hWriteThread保证对配置文件的写入:

 if (g_hWriteThread != INVALID_HANDLE_VALUE){if (WaitForSingleObject(g_hWriteThread, 200) == WAIT_TIMEOUT){::TerminateThread(g_hWriteThread, 0);g_hWriteThread = INVALID_HANDLE_VALUE;}}CWinThread * thread = AfxBeginThread((AFX_THREADPROC)WriteThread, this);if (thread != NULL){g_hWriteThread = thread->m_hThread;}

(3)程序写完,无法运行于windows 7

我的开发环境是8.1+VS2013,开发完成以后release版本放置于windows7的电脑无法正常运行,有MSTSCAX的窗体根本无法加载,在window7上跟踪dlg.DoModal()到occcont.cpp第925行 IsWindow(pTemp->m_hWnd) 引发了一个断言终止,往前分析看,原来是MSTSCAX并没有加载起,进入资源视图,真相大白:


于是我在WIN7上删除MSTSCAX并重新加入,搞定,Release版本在WIN7,WIN8.1完美运行。

(4)在win7生成的RDP文件无法正常运行

按照网上提供的rdp文件的格式,并运用API:CryptProtectData获得远程加密密码,导出rdp文件,在win8完美运行,在win7上并非正常运行,执行mstsc.exe以后未完成自动登陆,并未从已生成的rdp文件读取任何信息,如图:

我很好奇为什么在win8可以win7却不行,在用winhex查看rdp之后我发现我在rdp文件开头漏掉了FFEF,说明RDP是以Unicode编码存储的,这也说明,win8读取存储文件默认以Unicode编码来读取,win7在未找到FFEF时,不会以Unicode读取。编码,测试成功!

总结:任何看似简单的问题都有值得学习和探索的地方,我不反对重复造轮子,但是一定要在造轮子过程中有自己的见解和收获,遇到问题格物致知,方能求得编程本质。

这个远程桌面集成软件大体写到这,如果你做相应功能遇到问题也可以回复交流讨论。

C++实现远程桌面集群软件相关推荐

  1. 高性能集群软件Keepalived之基础知识篇

    一.Keepalived介绍 Keepalived是Linux下一个轻量级的高可用解决方案,它与HeartBeat.RoseHA实现的功能类似,都可以实现服务或者网络的高可用,但是又有差别:Heart ...

  2. Linux系统高可用集群软件之Keepalived

    Keepalived 集群软件是一个基于VRRP协议来实现的LVS(四层协议)服务高可用方案,可以利用避免单节点故障.LVS服务需要有2台服务器运行Keepalived服务,一台为主服务器(MASTE ...

  3. 本地kubectl客户端连接远程K8S集群

    下载kubectl curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt ...

  4. hadoop(05)、使用Eclipse连接远程Hadoop集群

    2019独角兽企业重金招聘Python工程师标准>>> 在前面的文中我们分别搭建了单机和集群的Hadoop环境,今天我们将实践使用Eclispe开发工具安装 hadoop的开发插件, ...

  5. linux 远程权限不够,Eclipse连接远程Hadoop集群开发时权限不足问题解决方案

    eclipse连接远程Hadoop集群开发时报错 Exception in thread "main" org.apache.hadoop.security.AccessContr ...

  6. 如何将Jupyter Notebook连接到远程Spark集群并每天运行Spark作业?

    As a data scientist, you are developing notebooks that process large data that does not fit in your ...

  7. K8s-kubectl远程管理集群

    在实际工作中,我们有一个需求,需要远程登陆管理集群.其实不用非要登录k8s-master去敲命令,可以使用任意一台内网互通的机器安装kubectl命令,去远程管理集群,非常方便 1.安装kubectl ...

  8. 远程桌面中goland软件不能使用键盘的历史后退和前进快捷键

    远程桌面中goland软件不能使用键盘的历史后退和前进快捷键 [背景] 多次使用发现在远程桌面中,goland软件不能使用键盘的control+alt+左箭头/右箭头来回顾已看过或编辑过的代码.这个太 ...

  9. linux下freerdp编译,linux下安装freerdp连接windows远程桌面的好软件软件

    linux下安装freerdp连接windows远程桌面的好软件软件 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 8.90 积分 Linux 下安 ...

最新文章

  1. 神经网络优化中的Weight Averaging
  2. div固定在浏览器顶部_手写几种常见的css布局,1垂直两栏左边固定右边自适应,垂直3栏左右固定中间自适应...
  3. 人口普查系统_晋江市召开第七次人口普查区域划分及标绘系统操作培训会
  4. 最详细的SSD论文笔记
  5. linux下安装wls1036_generic.jar,weblogic 安装
  6. 学完Java后可从事的十大领域!
  7. SDN第六次上机作业
  8. 经典算法归纳(c语言)
  9. 这个策略曾赚000万美元
  10. PR视频去水印—中间值
  11. 厚基础Linux——第七周作业
  12. 拼多多关键词搜索商品接口,拼多多关键词搜索列表接口,宝贝详情页接口,关键词取商品列表接口
  13. 编程表达年月日分秒c语言,年月日时分秒教学反思
  14. SpringBoot 基于向量搜索引擎及虹软人脸识别SDK的大规模人脸搜索
  15. Sixth week blog2
  16. AS查看程序MD5签名、SHA1
  17. 大连英语四六级百家外语10个让你四六级听力涨分的小技巧
  18. 拼多多、微信、MT被各大平台的BUG刷屏的2019年1月
  19. 红包封面红包序列号是什么,红包封面怎么弄,手把手教你制作个人红包封面
  20. 741.摘樱桃 动态规划

热门文章

  1. 我的世界手机版javaui材质包_教你然后用手机玩电脑版我的世界模组?
  2. 如此惊艳的财务报表,领导想不重用你都难!
  3. 信息网络传播中的服务器标准,信息网络传播权侵权认定标准适用研究
  4. PIC单片机之I/O控制
  5. 最新虚拟商品自动发货系统源码 v1.1.1 (发货100)
  6. 海思USB2.0、USB3.0 Device UVC规格热插拔会不识别
  7. 涓滴意念--java基础
  8. 【1059】求平均年龄
  9. 电脑怎么查看计算机历史记录,win7电脑使用记录怎么查询_win7电脑使用历史记录如何查看-win7之家...
  10. 提取灵格斯里ld2格式词典的内容