Ich habe nun seit mehreren Tagen versucht ein Bild über TSocketServer zum Client zu senden, leider ohne erfolg. Ich hoffe mal das hier Leute mir helfen es zu schaffen. Es soll soetwas ähnliches wie VNC werden. Mit dem folgenden Code mache ich ein Screenshot was in ein Stream geladen werden soll und vom SocketServer zum Client gesendet werden soll. Und in ein Image eingeladen werden soll.
Delphi-Quellcode:
procedure Screenshot(Quality: Integer);
type
TJPEGQualityRange = 1..100;
var
DeskWnd: HWnd;
DeskDC: HDC;
DeskCv: TCanvas;
R: TRect;
W, H: Integer;
Jpg: TJpegImage;
BMP: TBitmap;
begin
DeskWnd := GetDesktopWindow;
DeskDC := GetWindowDC(DeskWnd);
DeskCv := TCanvas.Create;
DeskCv.Handle := DeskDC;
W := Screen.Width;
H := Screen.Height;
R := Bounds(0, 0, W, H);
BMP := TBitmap.Create;
Jpg := TJpegImage.Create;
try
BMP.HandleType := bmDIB;
BMP.PixelFormat := pf24Bit;
BMP.Width := W;
BMP.Height := H;
BMP.Canvas.CopyMode := cmSrcCopy;
BMP.Canvas.CopyRect(R, DeskCv, R);
Jpg.CompressionQuality := Quality;
Jpg.Assign(BMP);
Jpg.SaveToFile('bild.jpg');
finally
BMP.Free;
Jpg.Free;
DeskCv.Free;
ReleaseDC(DeskWnd, DeskDC);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Screenshot(80);
end;
Das Bild muss nun erst in ein Stream geladen werden anstatt als Datei abgelegt werden.
Dann an den Client gesendet und dort in das Image eingeladen werden.
Und alle 5 sec ein neuer Screenshot versendet werden.