Entwickler-Ecke

Sonstiges (Delphi) - Screenshot von einem Java-Aplet erstellen?


jackie05 - Do 08.10.09 15:42
Titel: Screenshot von einem Java-Aplet erstellen?
Hallo,
ich habe hier im Forum nach Screenshot gesucht und folgendes gefunden:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
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;


und hier suche ich das Fenster:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
function FindWindowEx2(hParent: HWND; ChildClassName: string; ChildNr: Word): HWND;
var
  i: Word;
  hChild: HWND;
begin
  hChild := 0;
  Result := 0;
  Dec(ChildNr);
  for i := 0 to ChildNr do
  begin
    hChild := FindWindowEx(hParent, hChild, PChar(ChildClassName), nil);
    if hChild = 0 then
      Break;
    Result := hChild;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  wndMain, wndChild: HWND;
  Bmp: TBitmap;
begin
  wndMain := FindWindow('SunAwtFrame','******');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0'SunAwtCanvas'nil);
    wndChild := FindWindowEx(wndChild, 0'SunAwtCanvas'nil);
    wndChild := FindWindowEx2(wndChild,'SunAwtCanvas'2);
    if wndChild <> 0 then
    begin
      ScreenshotHidden(wndChild, Image1.Picture.Bitmap); 
      Image1.Invalidate;
    end;
  end;
end;


wenn ich das ausführe, dann bekomme ich nur ein Schwarzes Bild in Image1.
Woran kann das liegen?

Danke schonmal im Voraus.

MfG


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 08.10.2009 um 15:51