Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   "Fensterfoto" unter Windows 7 klappt nicht so recht... (https://www.delphipraxis.net/153225-fensterfoto-unter-windows-7-klappt-nicht-so-recht.html)

turboPASCAL 25. Jul 2010 20:35

"Fensterfoto" unter Windows 7 klappt nicht so recht...
 
Hi,

nun muss ich doch mal nachfragen. Ich mochte von einem Fenster welches Subfenster enthält eins dieser Subfenster als Bild kopieren.
Das klappt bei den OS XP und Vista ohne Probleme, jedoch bei Win7 bekomme ich den kompletten Desktop in mein Bitmap kopiert.

Ich glaube mich zu erinnern, das schon mal so ein Thema gab nur leider finde ich es nicht mehr.

mkinzler 25. Jul 2010 20:40

AW: "Fensterfoto" unter Windows 7 klappt nicht so recht...
 
Wie versuchst du den Screenshot zu machen?

turboPASCAL 25. Jul 2010 20:48

AW: "Fensterfoto" unter Windows 7 klappt nicht so recht...
 
So:

Delphi-Quellcode:
if (hNotifierWnd <> 0) and (isWindowVisible(hNotifierWnd)) then
  begin
    hInetExpWnd := FindWindowByClasses(...);
    if hInetExpWnd <> 0 then
    begin
      GetClientRect(hInetExpWnd, cwcr);

      hINSWndDC := GetDC(hInetExpWnd);
      if hINSWndDC <> 0 then
      begin
        with cwcr do
          stretchblt(hBmpDC, 0, 37, clWndWidth, clWndHeight - 37, hINSWndDC, 0, 0, Right - Left,
            Bottom - Top, SRCCOPY);
       
        // ...
      end;
      ReleaseDC(hInetExpWnd, hINSWndDC);
    end;
  end;

Luckie 26. Jul 2010 01:07

AW: "Fensterfoto" unter Windows 7 klappt nicht so recht...
 
Wird das Fenster denn gefunden?

sx2008 26. Jul 2010 07:42

AW: "Fensterfoto" unter Windows 7 klappt nicht so recht...
 
Also ich würde versuchen den Code sauber in einer Prozedur zu verpacken.
(Stichwort: Wiederverwendbarkeit und Testbarkeit)
Als Übergabeparameter würde ich das Fensterhandle und ein TBitmap-Objekt übergeben:
Delphi-Quellcode:
procedure MakeWindowScreenshot(hWnd:THWND; bitmap:TBitmap);
Dann würde ich zunächst einmal mit einem Fenster der eigenen Anwendung testen.
Danach würde ich es mit einem fremden Fenster versuchen, dass mit FindWindowByClasses(...) gefunden wurde.
Und ausserdem würde ich eine Exception werfen, wenn FindWindowByClasses(...) kein gültiges Fensterhandle liefert.

himitsu 26. Jul 2010 07:51

AW: "Fensterfoto" unter Windows 7 klappt nicht so recht...
 
Vielleicht auch mal schauen ob und welche Fehlermeldung GetClientRect liefert.
Und stretchblt hätte auch noch ein Result zum Prüfen, aber da hier ein anscheinend Bild geliefert wird, scheint das ja zu gehn.

@Luckie: Der Desktop hat zwar das Pseudo-Handle 0, aber er prüft ja auf
Delphi-Quellcode:
<> 0
, also wird vermutlich das Fenster gefunden.

turboPASCAL 26. Jul 2010 18:42

AW: "Fensterfoto" unter Windows 7 klappt nicht so recht...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Luckie (Beitrag 1037538)
Wird das Fenster denn gefunden?

Ja.

Zitat:

Zitat von sx2008 (Beitrag 1037552)
Also ich würde versuchen den Code sauber in einer Prozedur zu verpacken.
(Stichwort: Wiederverwendbarkeit und Testbarkeit)
Als Übergabeparameter würde ich das Fensterhandle und ein TBitmap-Objekt übergeben

Es ist ein Teil aus einer Procedure. ;)

Zitat:

Zitat von himitsu (Beitrag 1037558)
Vielleicht auch mal schauen ob und welche Fehlermeldung GetClientRect liefert.

Hm, mal gucken...

Zitat:

Zitat von himitsu (Beitrag 1037558)
Und stretchblt hätte auch noch ein Result zum Prüfen, aber da hier ein anscheinend Bild geliefert wird, scheint das ja zu gehn.

So ist es.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:11 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