AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Windows API / MS.NET Framework API Screenshot von verstecktem Fenster erzeugen

Screenshot von verstecktem Fenster erzeugen

Ein Thema von CK_CK · begonnen am 4. Aug 2008 · letzter Beitrag vom 21. Okt 2009
Antwort Antwort
Benutzerbild von CK_CK
CK_CK

Registriert seit: 31. Aug 2005
Ort: Dortmund, Germany
388 Beiträge
 
Delphi 2006 Enterprise
 
#1

Screenshot von verstecktem Fenster erzeugen

  Alt 4. Aug 2008, 23:02
Mit dieser Funktion kann man einen Screenshot eines Fensters machen, auch wenn dieses verdeckt oder versteckt ist.

Delphi-Quellcode:
function ScreenshotHidden(wnd: HWND; const bmp: TBitmap): Boolean;
var
  rec: TRect; //zum Zwischenspeichern der Fenstergröße
  dllh: THandle; //Handle der user32.dll
  //Prototyp der verwendeten Funktion
  PrintWindow: function(sHandle: HWND; dHandle: HDC; nFlags: UINT): BOOL; stdcall;
begin
  Result := False; //Rückgabewert initialisieren
  dllh := GetModuleHandle(user32); //dll dynamisch laden...
  if dllh <> 0 then
  begin
    @PrintWindow:= GetProcAddress(dllh , 'PrintWindow'); //die Funktionsadresse aus der Dll laden...
    if @PrintWindow <> nil then
    begin
      GetWindowRect(wnd, rec); //Größe des Fensters auslesen...
      bmp.Width := rec.Right - rec.Left; //...und die Bitmap-Größe anpassen
      bmp.Height := rec.Bottom - rec.Top;
      bmp.Canvas.Lock; //Zugriff auf den Canvas für andere Threads blockieren
      try
        result := PrintWindow(wnd, bmp.Canvas.Handle, 0); //Das Fenster zeichnet sich
                                                          //selbst in das HDC des Bitmaps
      finally
        bmp.Canvas.Unlock; //Zugriff wieder erlauben
      end;
    end;
  end;
end;
Die Funktion erwartet zwei Parameter:
wnd - Handle des Fensters, das kopiert werden soll
bmp - Bitmap, in das der Screenshot gespeichert wird

Aufrufen kann man die Funktion z.B. so:
(Screenshot von Notepad machen)
Delphi-Quellcode:
var
  wnd: HWnd;
begin
  wnd := FindWindow('Notepad',nil); //Handle vom Notepad-Fenster
  ScreenshotHidden(wnd, Image1.Picture.Bitmap);
  Image1.Invalidate;
end;
Ich habe lange nach so etwas gesucht und hoffe, es ist für noch jemanden hier nützlich

Chris

[edit=Daniel G]Code formatiert Mfg, Daniel G[/edit]
[edit=Daniel G]toms Hinweis ergänzt Mfg, Daniel G[/edit]
Chris
» «
Mehr von mir (Programme, etc.): http://www.kroegerama.de
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#2

Re: Screenshot von verstecktem Fenster erzeugen

  Alt 21. Okt 2009, 14:36
toms weißt auf Folgendes hin:

Zitat von toms:
Hallo,

Bei minimierten Fensteren gibt GetWindowRect für die Höhe / Breite immer -32000 zurück.
D.h ein Screenshot kann somit nicht von einem minimierten Fenster erstellt werden.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:02 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