AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Suche "echte" Screenshot Funktion

Ein Thema von tofse · begonnen am 29. Jan 2015 · letzter Beitrag vom 29. Jan 2015
Antwort Antwort
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#1

Suche "echte" Screenshot Funktion

  Alt 29. Jan 2015, 08:33
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
Miniaturansicht angehängter Grafiken
screen_druck.png   screen_delphi.png  
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Suche "echte" Screenshot Funktion

  Alt 29. Jan 2015, 09:08
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)
  Mit Zitat antworten Zitat
zagota

Registriert seit: 3. Sep 2014
38 Beiträge
 
#3

AW: Suche "echte" Screenshot Funktion

  Alt 29. Jan 2015, 09:13
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;
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Suche "echte" Screenshot Funktion

  Alt 29. Jan 2015, 09:32
Interessant ist, dass wir unterschiedliche CAPTUREBLT-Konstanten haben. Allerdings ist es wohl meine, die falsch ist. Ist mir wahrscheinlich nicht aufgefallen, weil ich immer Aero aktiviert hatte, wo es meines Wissens nach keinen Unterschied macht.
  Mit Zitat antworten Zitat
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#5

AW: Suche "echte" Screenshot Funktion

  Alt 29. Jan 2015, 14:35
Danke
  Mit Zitat antworten Zitat
Insider2004
(Gast)

n/a Beiträge
 
#6

AW: Suche "echte" Screenshot Funktion

  Alt 29. Jan 2015, 18:14
GetFormImage ?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Suche "echte" Screenshot Funktion

  Alt 29. Jan 2015, 18:37
Und wie bekommt man damit alle Formulare des Desktops?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Suche "echte" Screenshot Funktion

  Alt 29. Jan 2015, 19:12
Hallo,

ich hatte vor ein paar Wochen ein ähnliches Problem
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 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