AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem: Screenshot von Fenstern (mal anders)
Thema durchsuchen
Ansicht
Themen-Optionen

Problem: Screenshot von Fenstern (mal anders)

Ein Thema von Hanzmeierschulz · begonnen am 30. Jul 2006 · letzter Beitrag vom 31. Jul 2006
Antwort Antwort
Hanzmeierschulz

Registriert seit: 10. Jun 2006
16 Beiträge
 
Delphi 7 Professional
 
#1

Problem: Screenshot von Fenstern (mal anders)

  Alt 30. Jul 2006, 15:39
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.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Problem: Screenshot von Fenstern (mal anders)

  Alt 30. Jul 2006, 16:16
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 Schweizern oder in der CodeLib, das müsste irgendwo schon dabei stehen...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Hanzmeierschulz

Registriert seit: 10. Jun 2006
16 Beiträge
 
Delphi 7 Professional
 
#3

Re: Problem: Screenshot von Fenstern (mal anders)

  Alt 30. Jul 2006, 18:27
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.
  Mit Zitat antworten Zitat
Metal_Snake2

Registriert seit: 19. Nov 2004
134 Beiträge
 
Delphi 7 Personal
 
#4

Re: Problem: Screenshot von Fenstern (mal anders)

  Alt 30. Jul 2006, 18:31
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Problem: Screenshot von Fenstern (mal anders)

  Alt 30. Jul 2006, 22:54
Zitat von Hanzmeierschulz:
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.
Logisch, weil diese Pixel von dem betroffenen Fenster gar nicht existieren in diesem Moment.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hanzmeierschulz

Registriert seit: 10. Jun 2006
16 Beiträge
 
Delphi 7 Professional
 
#6

Re: Problem: Screenshot von Fenstern (mal anders)

  Alt 31. Jul 2006, 20:30
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: http://www.fengyuan.com/article/wmprint.html muss dazu noch die BeginPaint und EndPaint Funktion umbiegen und durch eigene ersetzen. Das ist mir aber zu aufwendig, vielleicht kennt ja jemand noch eine andere Lösung.
  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 01:33 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