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

2. При перехвате каждого сообщения функция-ловушка посылает окну (форме) frmMessages сообщение WM_SPY_NOTIFY (определенное пользователем, точнее, программистом сообщение, листинг 10.12).

Рис. 10.5. Форма перехвата сообщений

Но ведь ловушка предназначена для работы в другом процессе, а если так, то как ей дать знать, какому именно окну посылать сообщения? Для этого и используется именованная проекция файла в память, в которой сохраняются данные, необходимые для ловушки. В проекции файла ловушка также сохраняет информацию о перехваченном сообщении (код и параметры сообщения). Эта информация используется приложением, ведущим слежение. Данные в проекции файла хранятся в виде записи THooklnfo, объявленной в модуле HookData. В этом же модуле объявлены константа с именем проекции файла, код сообщения WM_SPY_NOTIFY (листинг 10.12) и две служебные переменные, использование которых будет пояснено далее.

...

Листинг 10.12.

Содержимое файла HookData.pas

type

//Структура (запись), которая хранится в разделяемом файле

//и используется для передачи данных между процессами

THookInfo = record

wnd: HWND; //Окно, за которым ведется наблюдение

hook_handle: HHOOK; //Дескриптор ловушки

spy_wnd: HWND; //Окно, уведомляемое о перехвате сообщения

//Следующие поля заполняются при перехвате сообщения

mess: UINT;

wParam: WPARAM;

lParam: LPARAM;

end;

var

//Указатель на разделяемую область памяти

hook_info: ^THookInfo;

//Дескриптор проекции файла в память

hFile: THandle;

const

//Имя проекции файла

strFileMapName = \'TricksDelphi_WinSpy_Mapping\

//Сообщение для уведомления окна-шпиона

WM_SPY_NOTIFY = WM_USER + 1;

Построение фильтра и обработка перехваченных сообщений

Теперь вернемся к приложению-шпиону, а точнее, к той его части, которая отвечает за работу формы, показанной на рис. 10.5.

Начнем с самого простого – управления фильтром сообщений. Он построен по тому же принципу, что управление списками оконных стилей (форма свойств окна, рассмотренная ранее).

Итак, структура, хранящая информацию о сообщении, выглядит следующим образом:

...

type MessageInfo = record

value: DWORD; //Код сообщения

name: String; //Название сообщения

used: Boolean; //Служебное поле

end;

При написании программы не стояла цель поместить в фильтр все возможные сообщения, поэтому массив messageslist (листинг 10.13) содержит только 16 элементов. При необходимости вы можете добавить нужные сообщения самостоятельно, взяв их обозначения из модуля Windows.

...

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

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

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

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

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

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

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

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

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