最近做一个远程控制软件,以前没做过的这东西,在获得远程机的桌面的时候,我用的方法是将桌面保存为位图文件,然后传到控制端,实际运行时发现,效果不太好,控制端闪得厉害,不知道还有什么别的办法.

解决方案 »

  1.   

    提两点建议。
    一是压缩位图,简单的可以将桌面位图转换成256色,再经过行程压缩后进行传递(2002年我以此办法使用VB实现过远程桌面监控,局域网内)。复杂一点的是直接将位图转换成256色gif,然后再传递。
    二是使用视频流技术,即将远程桌面图像转换成MPEG-4编码,然后再客户端进行解码播放。
    在网络中,除了使用双缓冲这类技术加速显示外,关键是数据流的大小与带宽大小,所以如何压缩数据是实现远程控制的关键。
      

  2.   

    我以前做过这种项目,提几点建议:
    1、用Dx截取屏幕画面,否则无法获得通过Dx画上取内容。
    2、屏幕分块处理,建议把屏幕分为8*8个区域或者更多,与前一次截取的内容对比,只发送有变化的区域。
    3、各块数据独立发送、接收、更新,以免接收过程中等待数据而不能及时更新显示。
    4、局域网内传送不要用压缩,互联网传送应选择RLE、LZW之类简单快速的压缩原理,可将本次截取的数据与前次向减后再压缩,这样效果更好。
      

  3.   

    楼上的兄弟,“1、用Dx截取屏幕画面,否则无法获得通过Dx画上取内容。 ”你是怎么截的使用ddraw overlay方式显示的东东的
      

  4.   

    回6楼,我当时做的时候没考虑Overlay方式,可以通过HOOK CreateSurface来处理。
      

  5.   

    to cnzdgs:hook CreateSurface取得overlay表面,是个方式,不过要求hook一定要在目标程序启动前安装,这是个问题。
      

  6.   

    我记得哪本书上的随书代码中有,是分块压缩传输的。楼主可以搜索:RemoteControl
      

  7.   

    回10楼,写一个DLL,在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows下面修改AppInit_DLLs值,将DLL路径加进去,所有进程加载的时候都会Load这个DLL。
      

  8.   

    我有这样的一个远程控制的源码 VC写的
    如果需要 发邮件给我: [email protected]
      

  9.   

    回12楼,AppInit_DLLs方式是很多病毒等软件喜欢使用的。再有,如果我的程序没运行,不希望有hook操作,当然,这个问题可以通过在dll里判断来处理。另一个问题就是所有进程都会加载该dll,且一直不会attach,这是不愿意看到的所以目前我采用了hook ddraw的blt bltfast flip等函数,判断是否是overlay调用,any other ideas?