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?