AGB  ·  Datenschutz  ·  Impressum  







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

Screenshot und semi transparente fenster

Ein Thema von Pichel · begonnen am 20. Apr 2008 · letzter Beitrag vom 20. Apr 2008
Antwort Antwort
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#1

Screenshot und semi transparente fenster

  Alt 20. Apr 2008, 01:45
Hallöchen.

Ich habe festgestellt, dass die normalen Screenshot-Routinen auf den Desktop immer die semi-transtparenten Fenster nicht mit anzeigen.

Hier mal die von mir bevorzugte Methode einen Screenshot zu erzeugen:
Delphi-Quellcode:
Procedure BMPScreenShot(var bmp:TBitMap; x, y, Width, Height: integer);
var dc : HDC;
    lpPal : PLOGPALETTE;
begin
  {get the screen dc}
  dc := GetDc(0);
  if (dc = 0) then begin
    exit;
  end;
  {test width and height}
  if ((Width = 0) or (Height = 0)) then begin
    Width := getdevicecaps (dc, horzres);
    Height := getdevicecaps (dc, vertres);
  end;
  if ((Width = 0) or (Height = 0)) then begin
    exit;
  end;
  bmp.Width := Width;
  bmp.Height := Height;
  {do we have a palette device?}
  if (GetDeviceCaps(dc, RASTERCAPS) and RC_PALETTE = RC_PALETTE) then begin
    {allocate memory for a logical palette}
    GetMem(lpPal, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)));
    {zero it out to be neat}
    FillChar(lpPal^, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)), #0);
    {fill in the palette version}
    lpPal^.palVersion := $300;
    {grab the system palette entries}
    lpPal^.palNumEntries := GetSystemPaletteEntries(dc, 0, 256, lpPal^.palPalEntry);
    if (lpPal^.PalNumEntries <> 0) then begin
      {create the palette}
      bmp.Palette := CreatePalette(lpPal^);
    end;
    FreeMem(lpPal, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)));
  end;
  {copy from the screen to the bitmap}
  BitBlt(bmp.Canvas.Handle, 0, 0, Width, Height, Dc, x, y, SRCCOPY);
  {release the screen dc}
  ReleaseDc(0, dc);
end;
Erstelle ich ein Formular mit auch nur geringer Transparenz (Alphablending := True) wird es auf dem Screenshot unsichtbar.

Ein mit ALT-PRINT erzeugter Screenshot zeigt diese Formulare jedoch an.

Da ich hierfür keine Lösung gefunden habe, war mein nächster Ansatz transparente Fenster explizit nochmal zu kopieren und in den bestehen Screenshot einzufügen, da ich festgestellt habe, wenn ich dies transparente Fenster direkt über sein Handle ansprechen bekomme ich auch einen Screenshot von diesem Fenster.

Per EnumWindows fehlt mir nun jedoch die möglichkeit ausschliesslich Fenster mit aktiver Transparenz zu beachten.

Vielleicht hat jemand eine Idee.
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Screenshot und semi transparente fenster

  Alt 20. Apr 2008, 07:01
Hallo

Bei BitBlt muss man gemäss msdn noch den "raster operation code" CAPTUREBLT angeben.

Delphi-Quellcode:
const
  CAPTUREBLT = $40000000;
Zitat:
Windows 98/Me, Windows 2000/XP: Includes any windows that are layered on top of your window in the resulting image. By default, the image only contains your window. Note that this generally cannot be used for printing device contexts.

BitBlt(bmp.Canvas.Handle, 0, 0, Width, Height, Dc, x, y, SRCCOPY or CAPTUREBLT);
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#3

Re: Screenshot und semi transparente fenster

  Alt 20. Apr 2008, 09:52
Zitat von toms:
Bei BitBlt muss man gemäss msdn noch den "raster operation code" CAPTUREBLT angeben.
Funktioniert SUPER Danke.

Aber mal wieder typisch, da probiert man stundenlang und sucht sich tot aber auf MSDN kommt man wieder nicht
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  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 13:46 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