Ich hab diesen code, von dem größtenteils Bahnhof verstehe
, mal etwas umgeschrieben, sodass er den namen der komponente anzeigt. Allerdings funktioniert das nur bei formularen in der eigenen anwendung, bei formularen aus anderen delphi anwendungen streikt er, und zwar bei
p:=p^;
Ich habe mal gehört, dass die
VCL von zwei Anwendungen nicht miteinander kompatibel ist. Liegt das daran?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var pi,p,pm:ppointer;
s:string;
c:pchar;
i,a:integer;
obj: tPersistent;
myhandle: hwnd;
begin
memo1.clear;
myhandle:=...; //myhandle ist das einzige, was ich benötige
p:=pointer(getwindowlong(myhandle,gwl_wndproc)+9);
pm:=p;
p:=p^;
p:=pointer(integer(p^)-44);
p:=p^;
c:=pchar(p);
s:='';
inc(c);
for i:=1 to pbyte(p)^ do begin
s:=s+c^;
inc(c);
end;
memo1.lines.Add(s); //classname des Windows
pm:=pointer(integer(pm^)+16);
for a:=0 to pinteger(integer(pm^)+8)^-1 do begin //von 0 bis componentcount
p:=pointer(integer(pm^)+4);
p:=pointer(integer(p^)+4*a);
pi:=p; //pi^ ist Zeiger auf ein Objekt
obj := TPersistent(pi^);
memo1.lines.add(obj.GetNamePath);
end;
end;