Найти окно чужой программы по названию кнопки в окне

Главный вопрос – где именно зависает?

Что значит "

в основном коде

"?

В программе с формой основной код – это:

DelphiВыделить код

1
2
3

  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;

В приведённом последнем исходнике я вижу следующую возможную проблему...

wn1

получает хэндл окна класса "#32770", в котором ищется Button и Edit. Если Button не найден, вызывается

EnumChildWindows

, т.е. по сути идёт рекурсивный вызов. Но прикол в том, что хоть там

wn1

и указан в качестве родительского окна, в функции

EnumWindowsProc

повторяется тот же самый процесс без учёта родителя (

hWnd

), т.е. снова

wn1

получает хэндл окна класса "#32770", в котором ищется Button и Edit. И дальше "у попа была собака". Т.е. Button и Edit

всегда

ищутся внутри окна класса "#32770", который ищется среди "верхних" окон (а не внутри контрола, который находится внутри этого "#32770"). Соответственно, если он его не нашёл один раз, то не будет находить и в следующий. Поэтому и зависает.

Добавлено через 48 секунд

Вы бы объяснили структуру окон и контролов – что нужно найти и где (т.е. внутри чего) "это" может находиться...

Добавлено через 3 минуты

При успешном нахождении рекомендую выставить

Result := False

. Хотя там немного посложнее должно быть (более сложный код я уже приводил, но его можно и упростить... не совсем чисто будет, но вполне юзабельно).