Screenshot ignoriert transparente Fenster

powerloop

Grünschnabel
Hallo,

ich habe mich intensiv durch das Internet gegooglet und mir mittlerweile fünf verschiedene Versionen einer Funktion geschrieben, die einen Screenshot vom gesamten Desktop machen soll (Hintergrund ist, dass ich den eigentlich anschließend als Textur für OpenGL verwenden will für einen Bildschirmschoner). Das funktioniert auch bis auf die Tatsache, dass Fenster, die Transparenz verwenden (z.B. WinAMP) auf dem Screenshot nie zu sehen sind.

Die fünf verschiedenen Varianten sind:
4x den DC des Desktop ermitteln, anschließend BitBlt und speichern:
  • ::GetDC(NULL)
  • ::GetDC:):GetDesktopWindow)
  • ::GetWindowDC:):GetDesktopWindow)
  • ::CreateDC("DISPLAY", NULL, NULL, NULL)

und 1x Simulation eines Tastendrucks auf DRUCKEN :):SendInput(...)) und holen der Daten aus dem Clipboard...

Das interessante ist, dass wenn ich die Clipboard-Variante verwende und anschließend die Zwischenablage in MS Paint hineinkopiere, sind die transparenten Fenster da :confused:

Hat irgendjemand eine Ahnung woran das liegen könnte? Oder hat jemand überhaupt schon eine entsprechende Erfahrung gemacht? Ich komme mir nämlich irgendwie allein auf weiter Flur vor, weil überall im Internet Screenshot über den Device Context und BitBlt erstellt werden und ich nirgendwo etwas über derartige Probleme gefunden habe...

Ach ja, ich habe das Ganze mit WinAPI pur programmiert, also keine MFC, QT oder sonstigen Framework. Zum Compilieren verwende ich MinGW mit dem gcc...

Vielen Dank schon mal, ich bin wirklich für jeden Tip dankbar (auch weil ich eigentlich ein Anfänger mit C/C++ und der WinAPI bin...)

Und wenn jemand gerne Quellcode sehen möchte, kann ich den natürlich auch gerne hier posten... habe ich nur drauf verzichtet, weil der Quellcode so eigentlich nix Besonderes und überall zu finden ist
 
Zurück