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;