Anbei eine Funktion, welche den gesamten Bildschirm, auch bei Mehr-Monitorsystemen
in eine BMP-Datei speichert. Einfach der Funktion den Dateinamen als Paramter übergeben und fertig!
Im Vergleich zu meinem alten Library-Eintrag dürfte diese Funktion etwas schneller sein, man lernt ja nie aus
Delphi-Quellcode:
procedure ScreenToFile(aFileName: string);
var
Bitmap: TBitmap;
Canvas: TCanvas;
begin
Canvas := TCanvas.Create;
try
Canvas.Handle := GetWindowDC(0);
try
Bitmap := TBitmap.Create;
try
Bitmap.Width := Screen.DesktopWidth;
Bitmap.Height:= Screen.DesktopHeight;
Bitmap.PixelFormat := pfDevice;
(*
Bitmap.Canvas.CopyRect(Screen.DesktopRect, Canvas, Screen.DesktopRect);
Anstatt der folgenden Zeile, kann auch die CopyRect Funktion genutzt werden.
Die CopyRect-Funktion nutzt zusätzlich ein paar Schutzmechanismen, welche für
ScreenShots nicht notwendig sind. Ausserdem greift die CopyRect-Funktion auf
StretchBlt-Funktion zurück, welche langsamer als BitBlt ist.
*)
BitBlt(Bitmap.Canvas.Handle, 0, 0, Pred(Screen.DesktopWidth), Pred(
Screen.DesktopHeight), Canvas.Handle, Screen.DesktopLeft,
Screen.DesktopTop, Bitmap.Canvas.CopyMode);
Bitmap.SaveToFile(aFileName);
finally
Bitmap.Free;
end;
finally
ReleaseDC(0, Canvas.Handle);
end;
finally
Canvas.Free;
end;
end;
...
...