В предыдущей части мы разобрались с такими функциями, как 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 – кончились объекты на форме) и сверяем класс каждого полученного объекта с bEdit – GetWindow возвращает всё подряд, вне зависимости от класса.
Забыл сказать, что функции GetClass и GetCaption берем из части 1 данной статьи. А так как порядок объектов всегда один, мы всегда имеем представление о том, что мы получили в данный момент.
В части 3 опишу подробнее поиск объектов по части названия и/или по всему дереву.
(c) crystalbit, http://parsers.info
Окна в windows это, несомненно, хорошо. А я вот смотрю в окно в квартире, там весна. Так и хочется заказать фигурки из цветов кому-нибудь…
Подпишись на rss и следующие части не пройдут мимо