![]() |
Screenshot und semi transparente fenster
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:
Erstelle ich ein Formular mit auch nur geringer Transparenz (Alphablending := True) wird es auf dem Screenshot unsichtbar.
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; 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. |
Re: Screenshot und semi transparente fenster
Hallo
Bei BitBlt muss man gemäss ![]()
Delphi-Quellcode:
const
CAPTUREBLT = $40000000; Zitat:
Delphi-Quellcode:
BitBlt(bmp.Canvas.Handle, 0, 0, Width, Height, Dc, x, y, SRCCOPY or CAPTUREBLT);
|
Re: Screenshot und semi transparente fenster
Zitat:
Aber mal wieder typisch, da probiert man stundenlang und sucht sich tot aber auf MSDN kommt man wieder nicht ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz