В предыдущей части мы разобрались с такими функциями, как FindWindow, FindWindowEx и GetWindow. Был также приведен код получения класса и заголовка.
Сегодня ограничимся примером работы с перечисленными ранее функциями.

[пример]
Как пример хочу показать способ получения статистики из такой программы как .Brutal от astako. Класс окна — .Brutal, класс объектов с нужной нам информацией — bEdit. Таких объектов девять, наша задача получить handle каждого из этих объектов, попутно получая их содержимое, будем записывать в TMemo. Поставим на форму Memo1, Button1. Для Button1 создаем событие onClick, пишем:

procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  Memo1.Clear;
  i:=FindWindow('.Brutal',nil);
  if i=0 then begin
    Memo1.Text:='.Brutal not found';
    Exit;
  end;
  i:=FindWindowEx(i,0,'bEdit',nil);
  repeat
    if GetClass(i)='bEdit' then
      Memo1.Lines.Add(GetCaption(i));
    i:=GetWindow(i,GW_HWNDNEXT);
  until i=0;
end;

Смотри, мы здесь находим форму, а если не находим, то есть получаем 0, то так и пишем. Далее с помощью FindWindowEx находим первый объект класса bEdit. С таким же успехом мы могли передать и nil, цикл бы проверил и те компоненты, которые до первого bEdit, но таким образом мы бы сделали на несколько действий больше. Дальше мы по циклу (пока GetWindow с параметром GW_HWNDNEXT не возвращает 0 — кончились объекты на форме) и сверяем класс каждого полученного объекта с bEditGetWindow возвращает всё подряд, вне зависимости от класса.
Забыл сказать, что функции GetClass и GetCaption берем из части 1 данной статьи. А так как порядок объектов всегда один, мы всегда имеем представление о том, что мы получили в данный момент.

В части 3 опишу подробнее поиск объектов по части названия и/или по всему дереву.

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

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