AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Screenshot von 3D Anwendung

Ein Thema von XXcD · begonnen am 18. Jan 2009 · letzter Beitrag vom 9. Feb 2009
Antwort Antwort
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#1

Screenshot von 3D Anwendung

  Alt 18. Jan 2009, 10:26
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?
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Screenshot von 3D Anwendung

  Alt 18. Jan 2009, 10:29
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
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#3

Re: Screenshot von 3D Anwendung

  Alt 9. Feb 2009, 19:04
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?
Matthias
  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 02:52 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