Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Suche "echte" Screenshot Funktion (https://www.delphipraxis.net/183695-suche-echte-screenshot-funktion.html)

tofse 29. Jan 2015 08:33

Suche "echte" Screenshot Funktion
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

ich verwende diese Funktion, um einen Screenshot zu erzeugen

Delphi-Quellcode:
procedure ScreenShot(Bild: TBitMap);
var
  c: TCanvas;
  r: TRect;
begin
  c := TCanvas.Create;
  c.Handle := GetWindowDC(GetDesktopWindow);
  try
    r := Rect(0, 0, Screen.Width, Screen.Height);
    Bild.Width := Screen.Width;
    Bild.Height := Screen.Height;
    Bild.Canvas.CopyRect(r, c, r);
  finally
    ReleaseDC(0, c.Handle);
    c.Free;
  end;
end;
Jetzt ist mir aufgefallen, dass dies kein "echter" Screenshot ist. Ich hänge zwei Beispiele an
Beim einen Screenshot habe ich die "Druck" Taste verwendet, um einen Screenshot zu erzeugen. Da ist dann alles dabei, was auch zu sehen ist.
Den anderen Screenshot habe ich mit dem Delphi Code erzeugt. Da fehlen die Fenster im Paint Programm, es ist also kein "echter" Screenshot

Hat da jemand einen Tipp/ eine Idee?

Danke
Christof

Namenloser 29. Jan 2015 09:08

AW: Suche "echte" Screenshot Funktion
 
Hatte in einem Screenshot-Programm von mir folgenden Code erfolgreich im Einsatz:
Delphi-Quellcode:
var
  DesktopDC: HDC;

const
  CAPTUREBLT = $4000000;

procedure TakeScreenshot(Dest: TBitmap; const CaptureRect: TRect);
begin
  Dest.SetSize(CaptureRect.Right-CaptureRect.Left,
    CaptureRect.Bottom-CaptureRect.Top);
  BitBlt(Dest.Canvas.Handle,
    0, 0,
    Dest.Width, Dest.Height,
    DesktopDC,
    CaptureRect.Left, CaptureRect.Top,
    SRCCOPY or CAPTUREBLT);
end;

initialization
  DesktopDC := CreateDC('DISPLAY', nil, nil, nil);

finalization
  DeleteDC(DesktopDC)

zagota 29. Jan 2015 09:13

AW: Suche "echte" Screenshot Funktion
 
Ich verwende folgendes:

Delphi-Quellcode:
procedure TRTLCommon.WriteScreenshot;
const
  CAPTUREBLT = $40000000;
var
  hdcScreen: HDC;
  hdcCompatible: HDC;
  bmp: TBitmap;
  hbmScreen: HBITMAP;
  DeskHeight,
    DeskWidth: Integer;
begin
  hdcScreen := CreateDC('DISPLAY', nil, nil, nil);
  hdcCompatible := CreateCompatibleDC(hdcScreen);
  try
    DeskHeight:= Screen.DesktopHeight;
    DeskWidth:= Screen.DesktopWidth;
    hbmScreen := CreateCompatibleBitmap(hdcScreen, DeskWidth, DeskHeight);
    try
      SelectObject(hdcCompatible, hbmScreen);
      bmp := TBitmap.Create;
      try
        bmp.Handle := hbmScreen;
        BitBlt(hdcCompatible, 0, 0, bmp.Width, bmp.Height, hdcScreen, 0, 0, SRCCOPY or CAPTUREBLT);
        bmp.Save....
      finally
        bmp.Free;
      end;
    finally
      DeleteObject(hbmScreen);
    end;
  finally
    DeleteDC(hdcScreen);
    DeleteDC(hdcCompatible);
  end;
end;

Namenloser 29. Jan 2015 09:32

AW: Suche "echte" Screenshot Funktion
 
Interessant ist, dass wir unterschiedliche CAPTUREBLT-Konstanten haben. Allerdings ist es wohl meine, die falsch ist. :oops: Ist mir wahrscheinlich nicht aufgefallen, weil ich immer Aero aktiviert hatte, wo es meines Wissens nach keinen Unterschied macht.

tofse 29. Jan 2015 14:35

AW: Suche "echte" Screenshot Funktion
 
Danke :thumb:

Insider2004 29. Jan 2015 18:14

AW: Suche "echte" Screenshot Funktion
 
GetFormImage ?

Bernhard Geyer 29. Jan 2015 18:37

AW: Suche "echte" Screenshot Funktion
 
Zitat:

Zitat von Insider2004 (Beitrag 1288202)
GetFormImage ?

Und wie bekommt man damit alle Formulare des Desktops?

Helmi 29. Jan 2015 19:12

AW: Suche "echte" Screenshot Funktion
 
Hallo,

ich hatte vor ein paar Wochen ein ähnliches Problem


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz