问题有两个:1、如何提高传输速度,如果用Winsock来做,一般使用什么样的方法传输速度最快?
            2、如何将被监控机的鼠标也保存在截屏图象中?

解决方案 »

  1.   

    to zyg0:你好,又见你,谢谢,不过兄台好像惜字如金,这个不瞒你说我是知道的,你的解答能否具体一点?
      

  2.   

    好的,我主要想实现的是在局域网中监控制定计算机的屏幕。
    现在我主要是这样实现的,用Winsock的udp将机器Bind后,在监控方发送监控指令到被监控计算机上,同时监控计算机设置一个共享文件夹用以存放被监控计算机保存的截屏图像,并将此共享文件夹名称等相关信息用Winsock发送到被监控计算机上,被监控计算机接收到信息后开始截屏并使用SavePicture保存图像(bmp文件)到上述文件夹中,此时被监控计算机发送一个消息给监控计算机通知已截取了一个屏幕图像(图像一共定义截取10幅的一个数组,因为存在延时现象,监控计算机在收到第2幅图像时删除前一幅图像,以此循环,用Timer计时),在监控计算机方读取并加载图像到PictureBox中。问题1:受监控计算机截取的图像没有鼠标指针
        2:尽管图像直接保存在监控计算机中,但文件太大,一般都在1.5M以上(受监控计算机的分辨率还是24色)
    请问我该如何解决,我想到用API函数的GetBitmapBits和SetBitmapBits先获取受控计算机的截屏图像数据然后发送给监控方再做处理,但不知速度如何,请问怎样实现???
    谢谢。
      

  3.   

    用VB 一般是慢的!參考下這些源碼:
    http://www.realvnc.com/download.html
      

  4.   

    1。udp协议 比tcp传送速度快,但是处理复杂要自动定义包头,找包,因为没有实体连接。因此占用网络资源也少
    2。如何将被监控机的鼠标也保存在截屏图象中? 我不会,但是我会控制鼠标的位置和点击
      

  5.   

    to zyg0:兄台不必在意文字上的表述,总之谢谢你,这是真话。在CSDN搜索过以前的贴子,也有很多人提过相似的问题,不知其他人都如何实现的,请做过的人现身解答。
      

  6.   

    我给你图像截获和转成jpg的代码,还有鼠标控制的代码,其他的不明白我们一起研究
    图像截获和转成jpg的代码,需要引用 kodak其他是乱玛的那个控件 的ImgEdit 控件,还有1个timmer控件Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal Scan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)'使用:
    '一个抓屏的例子
    Const VK_SNAPSHOT As Byte = &H2C
    ' 把应用窗口图象放到剪贴板:Private Sub Form_Load()
      Me.Hide
    Dim i As Long
    i = Timer  
    '
        Me.ImgEdit1.Image = App.Path & "\1.BMP"
      '先让ImgEdit随便显示一幅图片,不然后面的语句执行时会发生错误
        ImgEdit1.Display
    Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
     
         If (ImgEdit1.IsClipboardDataAvailable And ImgEdit1.ImageDisplayed) Then
            '从剪贴板粘贴图象,其参数为Imgedit的显示区域的起始坐标
            ImgEdit1.ClipboardPaste 0, 0
            ImgEdit1.CompletePaste
       End If
        ImgEdit1.SaveAs "c:\mytest.jpg", wiFileTypeJPG, , 6, 256 '保存图片为jpg格式
    MsgBox Timer - i
    End SubPrivate Sub Timer1_Timer()
    Dim i As Long
    i = TimerCall keybd_event(VK_SNAPSHOT, 0, 0, 0)
     
         If (ImgEdit1.IsClipboardDataAvailable And ImgEdit1.ImageDisplayed) Then
            '从剪贴板粘贴图象,其参数为Imgedit的显示区域的起始坐标
            ImgEdit1.ClipboardPaste 0, 0
            ImgEdit1.CompletePaste
       End If
        ImgEdit1.SaveAs "c:\mytest.jpg", wiFileTypeJPG, , 6 '保存图片为jpg格式
    MsgBox Timer - i
    End Sub
      

  7.   

    udp传文件我过几天才能写,你等等吧,鼠标按钮控制我记得是2个api实现的,现在实在找不到了,等找到了在贴上来
      

  8.   

    to zyg0:我说的保存鼠标,其实是一种变通的办法,看下面的代码就知道了。
    Private Sub Command1_Click()
         Dim ldwHwnd As Long
         Dim ldwDc As Long
         Dim lngRet As Long
         Dim Pt As POINTAPI
         Dim lCu As Long     ldwHwnd = GetDesktopWindow()
         ldwDc = GetDC(ldwHwnd)
         lngRet = GetCursorPos(Pt)
         lngRet = BitBlt(picScreen.hdc, 0, 0, picScreen.Width, picScreen.Height, ldwDc, 0, 0, vbSrcCopy)
         lCu = GetCursor()
         DrawIcon picScreen, Pt.X, Pt.Y, lCu
         
         SavePicture picScreen.Image, App.Path & "\MyTest.bmp"End Sub不知有没有好的办法了。
      

  9.   

    应是: DrawIcon picScreen.hdc,Pt.X,Pt.Y,lCu