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;
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! :)