Читаем Delphi. Трюки и эффекты полностью

Листинг 10.2.

Добавление в дерево информации об окне и поиск дочерних окон

function NewWindow(wnd: HWND; param: LPARAM):BOOL; stdcall;

var

wndNode, parentNode: TTreeNode;

begin

wndNode := AddWindowToTree(wnd); //Добавление информации об

окне в дерево

//Перечисление дочерних окон

parentNode := enInfo.parent;

enInfo.parent := wndNode;

EnumChildWindows(wnd, Addr(NewWindow), param);

enInfo.parent := parentNode;

//Продолжать перечисление (после перечисления

//всех дочерних окон)

NewWindow := True;

end;

Используемая в листинге 10.3 функция AddWindowToTree добавляет элемент, соответствующий найденному окну, в дерево (определяет текст заголовка окна и имя оконного класса):

...

Листинг 10.3.

Добавление элемента, соответствующего окну, в дерево

function AddWindowToTree(wnd: HWND): TTreeNode;

var

caption, classname: String;

text: String;

node: TTreeNode;

begin

//Получение текста окна

SetLength(caption, SendMessage(wnd, WM_GETTEXTLENGTH, 0, 0) + 1);

SetLength(caption, SendMessage(wnd, WM_GETTEXT, Length(caption),

Integer(PAnsiChar(caption))));

//Имя класса окна

SetLength(classname, 1024);

SetLength(classname, GetClassName(wnd, PAnsiChar(classname),

100));

//Формирование текста для элемента и добавление его в дерево

text := \'"\' + caption + \'" \' + classname;

node := enInfo.tree.Items.AddChild( enInfo.parent, text );

node.Data := Pointer(wnd); //Не забываем запомнить

//дексриптор окна

AddWindowToTree := node;

end;

Вот, собственно, и все, что требуется для построения полного дерева окон, показанного на рис. 10.3.

Получение информации об окне

Следующей функцией «оконного шпиона» является определение более-менее полной информации об окне, выбранном в дереве. Форма с информацией о выделенном в дереве окне (в данном случае это пресловутая кнопка Пуск) показана на рис. 10.4.

Рис. 10.4. Форма свойств окна

Начинается все с того, что по команде меню Правка → Свойства вызывается метод ShowWindowProp созданного при запуске программы объекта f rmWindowProp. Этот метод принимает в качестве параметра дескриптор окна, информацию о котором нужно отобразить (дескриптор сохраняется в поле Data каждого элемента при построении дерева) (листинг 10.4).

...

Листинг 10.4.

Подготовка формы свойств выбранного окна

procedure TfrmWindowProp.ShowWindowProp(window: HWND);

begin

wnd := window;

LoadWindowInfo();

ShowModal(); //Не забываем показать сами себя

end;

Переменная wnd, в которой сохраняется переданный BShowWindowProp дескриптор окна, является членом класса Tf rmWindowProp. Она нужна для того, чтобы другие методы формы Tf rmWindowProp могли получать доступ к дескриптору окна.

Определение заголовка, имени класса, идентификатора окна, а также области экрана, занимаемой окном, осуществляется в процедуре LoadWindowInf о (листинг 10.5).

...

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Мейерс , Скотт Майерс

Программирование, программы, базы данных / Программирование / Книги по IT