远程屏幕抓取客户端程序解决思路

远程屏幕抓取客户端程序
利用IDUDPclient控件如何在哪个事件里做屏幕的抓取处理???请教,学习。。。

------解决方案--------------------
我也想实现这个功能,先帮你顶一下,占个位置先
------解决方案--------------------
客户端收到抓图命令后,抓图,然后传递文件流给服务端
------解决方案--------------------
对IDUDPclient控件不熟悉的路过。
------解决方案--------------------
Delphi(Pascal) code

type
  TScreenThread = class(TThread)
  protected
    procedure Execute; override;
  end;

 if Memo1.lines.Strings[0]='StartDesk' then
   begin
      Timer2.Enabled:=true;
   end;
  if Memo1.lines.Strings[0]='StopDesk' then
   begin
      Timer2.Enabled:=false;
      Sleep(500);
      IdTCPClient1.Disconnect;
      screenthread.Terminate;
   end;

procedure TScreenThread.Execute;
var
    bmpscreen:Tbitmap;
    jpegscreen:Tjpegimage;
    FullscreenCanvas:TCanvas;
    dc:HDC;
    sourceRect, destRect: TRect;
    needstream:TMemoryStream;
    a,b,c,d:Integer;
    Flist:TStringStream;
begin
 
  a:=0;
  b:=0;
  c:= Screen.Width;
  d:=Screen.Height;
    try
       dc:=getdc(0);
       fullscreencanvas:=Tcanvas.Create;
       fullscreencanvas.Handle:=dc;
       bmpscreen:=Tbitmap.create;
       bmpscreen.Width :=c-a;
       bmpscreen.Height :=d-b;
       sourcerect:=Rect(0,0,c-a ,d-b );
       destrect:= Rect(a,b,c,d);
       bmpscreen.Canvas.CopyRect(sourcerect,fullscreenCanvas,destrect);
       jpegscreen:=Tjpegimage.Create ;
       jpegscreen.Assign (bmpscreen);
       jpegscreen.CompressionQuality:=10;
       jpegscreen.Compress;
       needstream:=TMemoryStream.Create;
       jpegscreen.SaveToStream(needstream);
       needstream.Position:=0;
       //传输
       Flist:=TStringStream.Create('');
       Flist.WriteString('StartDesk');
       if needstream.Size=0 then exit;
       if  form1.IdTCPClient1.Connected=True then
       begin
         if form1.TcpOnline.Connected=false then
          begin
           form1.IdTCPClient1.Disconnect ;
           form1.timer2.Enabled:=false;
          end 
         else
         begin
             form1.IdTCPClient1.WriteInteger(Flist.Size);
             form1.IdTCPClient1.WriteStream(Flist,True,False);
             form1.IdTCPClient1.WriteInteger(needstream.Size);
             form1.IdTCPClient1.WriteStream(needstream,True,False);
             form1.label3.Caption:=IntToStr(needstream.Size);
         end;

       end
       else
       begin
         if   form1.TcpOnline.Connected then
              form1.IdTCPClient1.Connect(2000);
       end; 
       ReleaseDC(0, DC);
    finally
          FullscreenCanvas.Free;
          bmpscreen.Free;
         jpegscreen.Free ;
         needstream.Free;
         flist.Free;
    end;
end;

procedure TForm1.Timer2Timer(Sender: TObject); 
begin
  screenthread := TScreenThread.Create(True);
  screenthread.FreeOnTerminate:=True;
  screenthread.Resume;
end;