读书人

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

发布时间: 2012-03-21 13:33:15 作者: rapoo

远程屏幕抓取客户端程序
利用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; 

读书人网 >.NET

热点推荐