C++实现远程桌面集群软件
由于在学校需要管理很多主机的需要,自己动手写了个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++实现远程桌面集群软件相关推荐
- 高性能集群软件Keepalived之基础知识篇
一.Keepalived介绍 Keepalived是Linux下一个轻量级的高可用解决方案,它与HeartBeat.RoseHA实现的功能类似,都可以实现服务或者网络的高可用,但是又有差别:Heart ...
- Linux系统高可用集群软件之Keepalived
Keepalived 集群软件是一个基于VRRP协议来实现的LVS(四层协议)服务高可用方案,可以利用避免单节点故障.LVS服务需要有2台服务器运行Keepalived服务,一台为主服务器(MASTE ...
- 本地kubectl客户端连接远程K8S集群
下载kubectl curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt ...
- hadoop(05)、使用Eclipse连接远程Hadoop集群
2019独角兽企业重金招聘Python工程师标准>>> 在前面的文中我们分别搭建了单机和集群的Hadoop环境,今天我们将实践使用Eclispe开发工具安装 hadoop的开发插件, ...
- linux 远程权限不够,Eclipse连接远程Hadoop集群开发时权限不足问题解决方案
eclipse连接远程Hadoop集群开发时报错 Exception in thread "main" org.apache.hadoop.security.AccessContr ...
- 如何将Jupyter Notebook连接到远程Spark集群并每天运行Spark作业?
As a data scientist, you are developing notebooks that process large data that does not fit in your ...
- K8s-kubectl远程管理集群
在实际工作中,我们有一个需求,需要远程登陆管理集群.其实不用非要登录k8s-master去敲命令,可以使用任意一台内网互通的机器安装kubectl命令,去远程管理集群,非常方便 1.安装kubectl ...
- 远程桌面中goland软件不能使用键盘的历史后退和前进快捷键
远程桌面中goland软件不能使用键盘的历史后退和前进快捷键 [背景] 多次使用发现在远程桌面中,goland软件不能使用键盘的control+alt+左箭头/右箭头来回顾已看过或编辑过的代码.这个太 ...
- linux下freerdp编译,linux下安装freerdp连接windows远程桌面的好软件软件
linux下安装freerdp连接windows远程桌面的好软件软件 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 8.90 积分 Linux 下安 ...
最新文章
- 神经网络优化中的Weight Averaging
- div固定在浏览器顶部_手写几种常见的css布局,1垂直两栏左边固定右边自适应,垂直3栏左右固定中间自适应...
- 人口普查系统_晋江市召开第七次人口普查区域划分及标绘系统操作培训会
- 最详细的SSD论文笔记
- linux下安装wls1036_generic.jar,weblogic 安装
- 学完Java后可从事的十大领域!
- SDN第六次上机作业
- 经典算法归纳(c语言)
- 这个策略曾赚000万美元
- PR视频去水印—中间值
- 厚基础Linux——第七周作业
- 拼多多关键词搜索商品接口,拼多多关键词搜索列表接口,宝贝详情页接口,关键词取商品列表接口
- 编程表达年月日分秒c语言,年月日时分秒教学反思
- SpringBoot 基于向量搜索引擎及虹软人脸识别SDK的大规模人脸搜索
- Sixth week blog2
- AS查看程序MD5签名、SHA1
- 大连英语四六级百家外语10个让你四六级听力涨分的小技巧
- 拼多多、微信、MT被各大平台的BUG刷屏的2019年1月
- 红包封面红包序列号是什么,红包封面怎么弄,手把手教你制作个人红包封面
- 741.摘樱桃 动态规划
热门文章
- 我的世界手机版javaui材质包_教你然后用手机玩电脑版我的世界模组?
- 如此惊艳的财务报表,领导想不重用你都难!
- 信息网络传播中的服务器标准,信息网络传播权侵权认定标准适用研究
- PIC单片机之I/O控制
- 最新虚拟商品自动发货系统源码 v1.1.1 (发货100)
- 海思USB2.0、USB3.0 Device UVC规格热插拔会不识别
- 涓滴意念--java基础
- 【1059】求平均年龄
- 电脑怎么查看计算机历史记录,win7电脑使用记录怎么查询_win7电脑使用历史记录如何查看-win7之家...
- 提取灵格斯里ld2格式词典的内容