Programowanie w języku Delphi » FAQ

Jak zrobić zrzut z ekranu

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

damian2208 2009-12-11 19:53

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;

marpi82 2007-04-29 11:14

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

BadSowa 2006-12-30 13:27

dzięki wielki tego szukałem

iYYa24 2005-07-26 16:05

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

seba22 2005-07-02 08:31

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

stanu 2003-05-11 19:29

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

Snowak 2004-04-13 13:31

Wielkie dzieki! Wlasnie tego potrzebowalem! :)