Jak zrobić zrzut z ekranu

Adam Boduch

Oto kod:

var
  Can: TCanvas;
  B: TBitmap;
begin
  try
 { tworzenie zmiennej }
    Can := TCanvas.Create;
 { przechwycenie uchwytu ekrnau }
    Can.Handle := GetWindowDC(GetDesktopWindow);

 { tworzenie bitmapy }
    B := TBitmap.Create;
    B.Width := Screen.Width;
    B.Height := Screen.Height;
    B.Canvas.CopyRect(Rect(0, 0, Screen.Width, Screen.Height), Can, Rect(0, 0, Screen.Width, Screen.Height));
    try // zapisz plik
      B.SaveToFile('C:\\plik.bmp');
   except // w wyniku bledu...
     raise Exception.Create('Bład w zapisie pliku...');
   end;

  finally
    Can.Free;
    B.Free;
  end;

8 komentarzy

A jak zapisać tak aby plik nie zajmował tak dużo? (ok 3 MB)
żeby np był w JPG?

EDIT: Już mam:)

procedure TForm1.Screen (Sender: TObject);
var
TJ : TJPEGIMAGE;
TB : TBITMAP; // Deklarujemy zmienne
TCa : Tcanvas;
begin
TCa := Tcanvas.Create;
TCa.Handle := getwindowDc(GetDesktopWindow); // Przejmujemy zrzut ekranu
try
TB := Tbitmap.create;
TB.Width := Screen.Width;
TB.Height := Screen.Height;
TB.Canvas.CopyRect(Rect(0, 0, Screen.Width, Screen.Height), TCa, Rect(0,0, screen.Width , screen.Height ));
TJ := TJPEG.Image.Create;
TJ.Assign(TB);
TJ.SaveToFile('C:\screen.jpg');
finally
TCa.Free;
TB.Free;
TJ.Free;
end;
end;

W Service application zapisuje pusty plik :/
Wiek ktos moze jak z tego wybrnac?

dzięki wielki tego szukałem

stanu, zmień partycje zapisywania, np na E, bo moze masz zapchany dysk albo chroniony przed zapisem !

Miodzio ! polecam te opcje do kazdego trojana, to znaczy przepraszam programu do zdalnego zarzadzania komputerem...

YOUUU!!
To jest to(bo robię szpiega) :)

przy:
Can.Handle := GetWindowDC(GetDesktopWindow);
wywala blad "Incompatible types: 'QPainterH' and 'HDC' "
co robic??

Wielkie dzieki! Wlasnie tego potrzebowalem! :)