公司让偶开发一个远程控制软件也就是在客户端控制服务器的运行状态及能够进行远程调试!本人现在的方案是:建立TCP连接,在服务器端截屏,通过SOCKET发送到客户端.客户端的操作通过SOCKET发过去
在服务器端进行模拟还原,达到控制的目的.这样做有一个弊端就是,截屏图片太大,传输太慢.不知还有没有别的方式?请大家多指教!

解决方案 »

  1.   

    截图后使用LZW算法对图像进行压缩,这样可以减少数据传输量或者对屏幕上发生变化的区域进行记录,第一次传输全屏的,以后只传输变化的区域,这样数据量会很小
      

  2.   

    做个GDI调用的钩子。钩住所有的GDI调用,将每一个调用与其参数发送到控制端。控制端重现这些GDI调用。
      

  3.   

    感谢各位的支持我想知道除了屏幕截图的方式,还有没有别的方法?我们头说,可以调用显卡驱动的刷屏动作,通过DDK编程,不知这样做是不是没有什么道理?to joeRen :钩住GDI的所有调用,同样也需要进行截屏发送过来是吗?不然客户端怎样得知服务器端的情况?
      

  4.   

    不用的。你只需要服务端将调用了那些函数、参数是什么传过来就行了。客户端这边通过调用相应的函数模拟服务端的情况。
    这样首先要在客户端向所有窗口发送WM_PAINT消息强迫所有窗口全部重画自己,而客户端则针对那些窗口创建一些新的窗口,然后在其上调用那些发送过来的GDI函数画图。
      

  5.   

    TO JoeRen: 我还是有点不懂,
    比如,在客户端并没有服务器端的程序,那怎样知道服务器端程序的运行状态,除非服务器端和客户端完全是一样的.如果是这样,那么软件的使用受限制太大了.
      

  6.   

    to taianmonkey你能介绍下 VNC 吗,我不知道.麻烦了:)
      

  7.   

    你不需要知道服务器的运行状态,只要知道它以什么顺序调用了GDI的函数就行了。
    所有的屏幕显示,包括窗口元素的显示,都是调用GDI画出来的。你只要在客户端照着一笔一划画就是了。
      

  8.   

    地球发动机:如果服务器端显示了个BMP图呢?读入了一个TXT文件并显示呢?
      

  9.   


       通过GDI钩子的方法来做的话,可能工作量太大。并且有很多问题。   通过DDK接管屏幕输出呢,效果可能较好,但要求懂DDK编程。   VNC也是一种和楼主你说的差不多的软件,好像在他的主页上有较老版本的   源码下载,可以去看下。   
      

  10.   

    1.显示一个位图:只有将位图也传过去,别无他法。
    2.显示TXT文件:最终将会调用DrawText之类的函数显示的,那时候传过去。
      

  11.   

    我认为把截屏图在本地压缩成JPEG格式的,将会大大减少数据量。
      

  12.   

    用勾子的话,慢死你,我做了一个远程控制的程序.
    转化成JEPG的方式,占客户资源太大,如果客户分辨率高的化,CPU的占用率太高.
    如果为1024*768,它要分配一次内存,对拷贝屏幕后的数据分析三次,如果你用一个函数去做,很慢,
    我后来解决的办法是,分屏幕为N个区域,N取决于分辨率.你自己决定.
    每次要拷贝的时候,先用拷贝成单色的,然后对照上次的数据,如果区域数据改变,则记录此区域
    这样数据量就减小,当然最坏的情况还是要整屏幕发送.
    图象直接村成BMP格式文件,然后发送的时候用LZIB压缩,压缩的时候也不是整个文件压缩,只是
    分成200K一次压缩,这样占用CPU资源上,然后在服务端解包,然后画到内存位图,只有显示的时候会是一块块更新.
    因为我做的是木马,所以考虑的是不让对方发现CPU资源占用太大而这样做.
    可以做为参考,HEHE.
      

  13.   

    钩子, 将新的窗口压缩发回,并和原有图象在client合成。