В предыдущих частях (1 2) мы разобрались с такими функциями, как FindWindow, FindWindowEx и GetWindow. Получили handle поля ввода логина квипа и вытащили статистику из .Brutal.
Сегодня займемся поиском объектов по части заголовка и по всем степеням вложенности.

[практика]
Все объекты конкретного класса с одним родителем мы уже находили (см. пример с .Brutal во второй части).
Пойдём дальше, разберем пример нахождения объекта, который находится на форме, причем он может как стоять на самой форме, так и на том, что стоит на форме, и так далее до бесконечности. Я облегчу тебе жизнь, вот готовая функция:

function SearchForWindow(hParent:integer; hClass, hCaption:string):integer;
var
  cWnd, Wnd: integer;
  sClass: string;
begin
  Result:=0;
  Wnd:=GetWindow(hParent, GW_CHILD);
  if Wnd=0 then
    Exit;
  repeat
    sClass:=GetClass(Wnd);
    if ((hClass=sClass) or (hClass='')) and
                      ((hCaption=GetCaption(Wnd)) or (hCaption='')) then begin
      Result:=wnd;
      Break;
    end;
    cWnd:=SearchForWindow(Wnd, hClass, hCaption);
    if cWnd<>0 then begin
      Result:=cWnd;
      Break;
    end;
    Wnd:=GetWindow(Wnd, GW_HWNDNEXT)
  until Wnd=0;
end;

Она возвращает handle объекта, мы её передаем handle объекта-родителя, нужный нам класс и заголовок, здесь нужно точное соответствие или пустая строка. Мы получаем первый объект, потом функция завершает работу, какой бы вложенной она ни была. Сам процесс, саму рекурсию описывать не стану — будут вопросы — пиши в коментах или в icq #224116.
Модернизируем немного код и получим функцию для полноценного поиска, например, по части заголовка:

    if ((hClass=sClass) or (hClass='')) and Pos(hCaption, GetCaption(Wnd))<>-1) then begin

Думаю не стоит объяснять вместо чего это писать, всё достаточно очевидно. На сегодня закончим ; )

(c) crystalbit, http://parsers.info

Странный сон был после написания этого поста — ехал на машине вдоль китайской стены, захотел в туалет. Остановился, сказал самраю, мол куплю туалетную кабину. Он оказался админом гугла и ответил мне выдачей. Бррр.

Подпишись на rss и следующие части не пройдут мимо тебя