https://smart888.taobao.com/ 立观智能监控
分类: WINDOWS
2009-07-03 15:40:53
以前在给别人介绍Windows CE的开发时,为了演示设备上程序的运行情况,就用Remote Zoomin来截屏,设备端一刷新,Remote Zoomin就得去手动Refresh一下,在CE和PC两边忙得不亦乐乎。当时就想,要是有自动刷新的功能不就省去了这么多麻烦吗。如果能在PC端直接控制CE设备,岂不更好?
看了帮助文件,原来WinCE是支持RDP的,添加相应的组件,编译完成后,在设备上测试发现CE真的可以登陆Windows XP,而且效果还不错!但CE本身并不能做Server,只能做Client。所以直接利用现成的组件是不可能了,只能自己做一个这样的小工具,以免以后又忙得不可开交。
初步分析了一下,为了实现这个功能,CE端需要做两个事情,第一,实时截屏并发送给PC。第二,接收PC端发过来的命令(主要是鼠标和键盘的消息命令)并
先说CE端的截屏,主要工作就是将屏幕的设备环境拷贝到对应的内存设备环境里去,再发送DIB里的数据即可,PC调用函数StretchDIBits()显示接收到的Color Data。这里唯一需要注意的就是在截屏时并没有截取鼠标指针的信息,所以在截屏之后得手动画上鼠标的指针。否则,PC端就不能显示CE鼠标的位置和动作了。
模拟鼠标和键盘的事件在CE端是很容易的,用mouse_event()和keybd_event()这两个函数就足够了。而PC端捕获鼠标和键盘的消息则有两种方法,方法一是在PreTranslateMessage中来做,方法二则是在各个消息处理函数中来做。这里需要注意一下,键盘的消息必须在PreTranslateMessage中处理,否则捕获不到。刚开始,我还在这里迷惑了一阵。L
原理的东西就不多讲了,其实跟Windows下的远程控制类软件的思路是一样的。接下来就考虑一些细节的问题。譬如通信的方式,EVC中的远程工具是可以通过ActiveSync来通信的,也可以用Ethernet。所以为了方便最好也能用这两种方式。另外,如果在使用ActiveSync时,是否可以利用RAPI,直接把设备端的程序拷贝到CE上,并让其运行。这样又省了手动拷贝的麻烦。
仔细琢磨了一阵,发现这些需求都可以实现。把各部分都实现完了以后联调,基本达到了预期的效果。但在CE分辨率较大时感觉有点迟钝。所以又想了优化的方法。基本上有以下三点,比较、分块、压缩。所谓比较,就是在CE截屏之后做一个备份,再次截屏时将其与备份进行比较,如果不一致再发送,否则就不用发给PC做更新。分块是可以和比较一起使用的,如果屏幕只是局部更新,那可以只发送更新的块,而其他块则不发送。压缩理论上是可以提高传输效率的。粗略的比较了一下,一张640*480的16Bit的位图是600K,而压缩之后的JPG图片才几十K,差别还是相当可观的。这三种方法都能节省网络带宽,但也都会增加CPU的负担,实际效果也不好说。因为这个小工具主要是在局域网中使用,带宽不是问题,所以,暂时就不做优化的工作吧。
后来有一次,有人问起CE下的触摸屏校准在哪里,CE同步的连接怎么建立。为了确保他能准确操作,便利用这个远程显示工具和屏幕录像专家录了一个视频,果然效果相当好。后来想想,还不如在这个小工具中集成录屏的功能,这样又免去了开屏幕录像专家的麻烦。于是,找了一个很方便用的从BMP保存为AVI的类,添加了录屏功能。当然由于没有压缩,所以录制的AVI文件很大,一分钟就几十兆!
自从有了这个小工具,演示WindowsCE下的程序就很从容了,并且还能录制WinCE下的操作步骤,省了很多口水。现在贴出来跟大家一起分享,也希望能解决你的麻烦。^_^
有关RMC工具的几点说明:
1. 由于它支持USB ActiveSync的连接方式,并能够自动拷贝文件到设备上运行,所以在没有LCD的情况下,你可以用你的电脑
2. 在使用同步连接,并且希望能自动拷贝设备端程序时,请不要修改设备端程序RMCEC.exe的文件名,并将其和RMCPC.exe放在同一个目录下面。
其实,后来在网上也找到了几个功能类似的软件。其中一个是Windows Mobile
WinCE远程控制小工具的下载地址: http://files.cnblogs.com/we-hjb/WinCE远程控制.rar