@Frifra: Wer sagt dir aber dass, das
handle was dir findwindow zurück gibt auch wirklich von deinem dialog ist und nicht das
handle eines fensters aus einer anderen anwendung?
wenn ich folgendes auf meinem Rechner ausführe bekomme ich 4 handles in meiner Listbox was also auch heißt das es 4 Fenster mit dem Classname gibt. Somit wäre deine Variante nicht sehr zuverlässig.
Delphi-Quellcode:
var LHandle: Cardinal;
LStr: PChar;
begin
LStr := StrAlloc(255);
LHandle := FindWindow('#32770', nil);
while (LHandle <> 0) do
begin
GetClassName(LHandle, LStr, 254);
if LStr = '#32770' then
ListBox1.Items.Add(inttostr(LhANDLE));
LHandle := GetWindow(LHandle, GW_HWNDNEXT);
end;
StrDispose(LStr);
end;
bei der variante von Toms ist es auch nicht anders, da kann es ganauso passieren das man entweder kein
handle zurück bekommt oder das von einem anderen dialog.
Wenn du das ganze wie folgt erweiterst kannst du wenigstens sicherstellen dass, das gefundene Fenster zu deiner Anwendung gehört:
Delphi-Quellcode:
var LHandle: Cardinal;
LStr: PChar;
begin
LStr := StrAlloc(255);
LHandle := FindWindow('#32770', nil);
while (LHandle <> 0) do
begin
GetClassName(LHandle, LStr, 254);
if LStr = '#32770' then
begin
if GetWindow(LHandle, GW_OWNER) = Application.Handle then
EnumChildWindows(LHandle, @EnumProc, 0);
end;
LHandle := GetWindow(LHandle, GW_HWNDNEXT);
end;
StrDispose(LStr);
end;