Einzelnen Beitrag anzeigen

Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

Bildschirmfoto knipst nicht alles

  Alt 29. Mai 2018, 01:15
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-fehlt-.jpg
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;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat