远程屏幕抓取客户端程序解决思路
远程屏幕抓取客户端程序
利用IDUDPclient控件如何在哪个事件里做屏幕的抓取处理???请教,学习。。。
------解决方案--------------------
我也想实现这个功能,先帮你顶一下,占个位置先
------解决方案--------------------
客户端收到抓图命令后,抓图,然后传递文件流给服务端
------解决方案--------------------
对IDUDPclient控件不熟悉的路过。
------解决方案--------------------
利用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;