...

Листинг 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).

Загрузка...