![]() |
Problem: Screenshot von Fenstern (mal anders)
Hi,
ich habe folgendes vor. Mein Delphi-Programm soll von einem beliebigen Fenster-Handle (HWND) einen Screenshot machen. Hört sich erstmal einfach an, denn ich habe mit GetDC bzw. GetWindowDC den DeviceContext geholt und dann mit BitBlt in ein TBitmap kopiert. Das geht auch soweit, nur gibt es zwei Probleme: 1. Liegt das zu fotografierente Fenster nicht komplett oder garnicht auf den Desktop, also es ist z.B. ganz nach rechts verschoben, wird dieser Teil nicht mit kopiert, sonder nur der Teil der auf dem Desktop liegt. 2. Ist ein Fenster, z.B. durch OnTop, darüber, so wird das "obere" Fenster auch mit teilweise abfotografiert. Somit ist mein Ziel das Fenster so zu fotografieren, dass egal wo das Fenster liegt oder ob ein anderes Fenster darüber liegen, komplett zu fotografieren. Ich hoffe es gibt da eine Lösung. |
Re: Problem: Screenshot von Fenstern (mal anders)
Ich glaube, da gibt es eine Message - WM_FORCEPAINT oder so, die du an das Fenster schickst. Dann wird es komplett gezeichnet. Schau mal in entsprechende Sources z.B. bei den
![]() |
Re: Problem: Screenshot von Fenstern (mal anders)
Hab mal alles durchgeschaut, aber nicht richtiges gefunden.
Gibt es die Möglichkeit, denn Fenster zu sagen, dass es auf einen anderen Context als den Desktop sich zeichnet? So zu sagen das Fenster-Zeichnen umleiten. |
Re: Problem: Screenshot von Fenstern (mal anders)
Ne also so einfach ist das nicht.
Selbst mit PrintWindow funzt es nicht ganz. Die einzige möglichkeit ist hierfür ein Globaler Hook per dll-injection. |
Re: Problem: Screenshot von Fenstern (mal anders)
Zitat:
|
Re: Problem: Screenshot von Fenstern (mal anders)
Habs es zum Teil hinbekommen. Ich habe mir eine DLL geschrieben die sich an WndProc des Fensters "hookt". Dort wird dann durch eine eigene User-Message ein WM_PRINT ausgelösst und der Inhalt dann in ein TBitmap gespeichert. Leider wird nicht immer das komplette Fenster kopiert (anders als oben, hier fehlen Teile im Fenster). Das liegt daran, das in der OnPaint-Methode vom Fenster mit BeginPaint (EndPaint) ein neuer (anderer) Context erzeugt wird und somit nicht in mein TBitmap gelangt. Laut dieser Seite:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 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-2025 by Thomas Breitkreuz