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 Flashobjekten mit dem Attribut wmode="opaque" (https://www.delphipraxis.net/166258-screenshot-von-flashobjekten-mit-dem-attribut-wmode%3D-opaque.html)

corema 4. Feb 2012 20:25


Screenshot von Flashobjekten mit dem Attribut wmode="opaque"
 
Guten Abend,

ich versuche einen Screenshot einer Flashanwendung auf Facebook zu machen.
bei anderen Anwendungen, beispielsweise YouToube bekomme ich den Screenshot ohne Probleme, nur bei Facebook will es nicht funktionieren.
Ich bekomme stets nur ein BitMap, das 1x1 Px groß ist.

So bekomme ich meinen Screenshot:
Delphi-Quellcode:
function TReader.Screenshot(h: HWND):TBitMap;
var Rec: TRect;
    b:TBitmap;
begin
  b := TBitmap.Create;
  GetWindowRect(h, Rec);
  b.Width := Rec.Right - Rec.Left;
  b.Height := Rec.Bottom - Rec.Top;
  BitBlt(b.Canvas.Handle, 0, 0, b.Width, b.Height, GetWindowDC(h), 0, 0, SRCCOPY);
  result := b;
end;
Ich benutze Firefox (bei IE funktioniert es auch nicht) die Klasse heißt dort GeckoPluginWindow

ich würde mich freuen, wenn mir jemand weiterhelfen kann.

Gruß
corema

EDIT:
Heute morgen habe ich herrausgefunden, dass das offensichtlich durch das attribut wmode im embed-tag veruracht wird:
<embed src="myflash.swf" wmode="opaque" type="application/x-shockwave-flash">
Ist dieses Attribut enhalten, erhalte ich KEIN Handle (Ansonsten schon).
Bei facebook bekam ich zwar ein Handle, doch dies war nicht das von der Anwenung, die ich haben wollte, sondern von einer anderen.

Medium 4. Feb 2012 22:38

AW: Screenshot von Flashanwendung auf Facebook
 
Woher kommt, bzw. wie ermittelst du das zu übergebende HWND?

corema 5. Feb 2012 07:14

AW: Screenshot von Flashanwendung auf Facebook
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das Hwnds werden in ein TTreeView eingetragen. von Dort aus kann ich mit einem Dbl-Klick auf den eintrag ein Screenshot machen.
EnumChildWindows und EnumTopLevelWindows stammen aus der angehängten Unit.
(In GetWindows sind Zeilen enthalten, die den Screenshot automatisieren. Die habe ich zur besseren übersicht rausgenommen)

Delphi-Quellcode:
procedure TReader.GetWindows(H:hwnd = 0; node : TTreeNode = nil);
var wlist : TWindowList;
    j,i:integer;
    PNode : TTreeNode;
    PHwnd : Hwnd;
    sclass : string;
    screen : TBitMap;
begin
  wlist := TWindowList.Create; // Objekt erzeugen
  try
    wlist.AddClassname := True;
    wlist.ShowUnvisibleWindows := False;
    if(node = nil) then begin
      wlist.EnumTopLevelWindows;
    end
    else wlist.EnumChildWindows(h);

    for I := 0 to (wlist.count)- 1 do begin
      PHwnd := GetParent(wlist.Handles[i]);
      if(PHwnd <> h) then continue;

      if(node = nil) then PNode := TReeWInd.Items.addFirst(nil,inttostr(wlist.handles[i])+':'+wlist[i])
      else PNode := TreeWind.Items.AddChild(Node, inttostr(wlist.handles[i])+':'+wlist[i]);

      GetWindows(wlist.Handles[i],PNode);
    end;
  finally
    wlist.free;
  end;
end;

procedure TReader.TreeWindDblClick(Sender: TObject);
var txt:string;
    i:integer;
    sc : TBitMap;
begin
  txt := '';
  for i:= 1 to length(TreeWind.Selected.Text) do begin
    if(TreeWind.Selected.Text[i] = ':') then break;
    txt := txt+TreeWind.Selected.Text[i];
  end;
  if(txt <> '') then begin
    sc := TBitMap.Create;
    sc := screenshot(strtoint(txt));
    sc.SaveToFile('asd.bmp');
    image1.Picture.Bitmap := sc;
  end;
end;


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