Hi, ich probiere mich mal am Knipsen von Fenstern, es funktioniert ja eigentlich auch schon relativ gut.
Bei manchen Programmen die ich Knipse fehlt leider Bildinhalt, ich habe mal mit professioneller Screenshot-Software den Fehler geknipst damit ich es irgendwie besser Erklären kann.
Im Hintergrund mein geknipstes Bild in IrfanView, im Vordergrund das was ich Knipsen wollte
Da sieht man das in der Menu-Leiste nicht alles vom Original aufgenommen wurde.
Das ist eines der Probleme, das andere, wenn ich
OpenGL/
DirectX Anwendungen starte und Knipse entstehen nur schwarze Bilder, gibts da ein Trick?
Mit diesem Code erstelle ich die Bilder.
Delphi-Quellcode:
procedure TForm1.Screenshot (
const FullWindow: Boolean = True);
var
Win: HWND;
DC: HDC;
Bmp: TBitmap;
FileName:
string;
WinRect: TRect;
Width: Integer;
Height: Integer;
begin
Form1.Label1.Caption := '
Error: No Handle!';
Form1.Hide;
try
Application.ProcessMessages;
Win := GetForegroundWindow;
if Win = 0
then Exit;
Form1.Label1.Caption := '
Error during save!';
if FullWindow
then
begin
GetWindowRect(Win, WinRect);
DC := GetWindowDC(Win);
end else
begin
Windows.GetClientRect(Win, WinRect);
DC := GetDC(Win);
end;
try
Width := WinRect.Right - WinRect.Left;
Height := WinRect.Bottom - WinRect.Top;
Bmp := TBitmap.Create;
try
Bmp.Height := Height;
Bmp.Width := Width;
BitBlt(Bmp.Canvas.Handle, 0, 0, Width, Height,
DC, 0, 0, SRCCOPY);
FileName := '
Screenshot_' +
FormatDateTime('
mm-dd-yyyy-hhnnss', Now());
Bmp.SaveToFile(Format('
.\%s.bmp', [FileName]));
finally
Form1.Label1.Caption := '
Saved!';
Bmp.Free;
end;
finally
ReleaseDC(Win,
DC);
end;
finally
Form1.Show;
end;
end;