Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Screenshot von 3D Anwendung (https://www.delphipraxis.net/127741-screenshot-von-3d-anwendung.html)

XXcD 18. Jan 2009 10:26


Screenshot von 3D Anwendung
 
Hallo,
ich versuche gerade ein Screenshot von einzelnen Fenstern zu erstellen und bei 3D Anwendungen(Spiele) funktioniert das irgendwie nicht.
Ich habe folgenden Code:
Delphi-Quellcode:
function ScreenshotHidden(wnd: HWND; const bmp: TBitmap): Boolean;
var
  rec: TRect;   //zum Zwischenspeichern der Fenstergröße
  dllh: THandle; //Handle der user32.dll
  PrintWindow: function(sHandle: HWND; dHandle: HDC; nFlags: UINT): BOOL; stdcall; //Prototyp der verwendeten Funktion
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;

var
  wnd: HWnd;
begin
  wnd := FindWindow('Notepad',nil); //Handle vom Notepad-Fenster
  ScreenshotHidden(wnd, Image1.Picture.Bitmap);
  Image1.Invalidate;
end;
Code von hier: http://www.delphipraxis.net/internal...ght=screenshot

Kann mir da einer helfen, dass ich auch von einer 3D Anwendung Screenshots erstellen kann?

Meflin 18. Jan 2009 10:29

Re: Screenshot von 3D Anwendung
 
Das funktioniert nicht, da Spiele (die ja OpenGL oder DirectX benutzen) direkt in den Graphikkarten-RAM schreiben. Vielleicht hilft dir das hier weiter:
http://www.delphipraxis.net/internal...=175681#175681

zeras 9. Feb 2009 19:04

Re: Screenshot von 3D Anwendung
 
Habe die Funktion unter XP zum Laufen bekommen. Dann die Exe auf einer 2000er Maschine gestartet. Dort bekomme ich keinen Screenshot. Ist das nur für XP ausgelegt?

Nachtrag 10.02.09

Funktion @PrintWindow:= GetProcAddress(dllh , 'PrintWindow'); //die Funktionsadresse aus der Dll laden... wird mit Nil beendet. Was heißt das nun? Muss ich eine DLL mit ins Programmverzeichnis oder DLL Verzeicnis kopieren?


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