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]