Einzelnen Beitrag anzeigen

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