...

Листинг 10.18.

Запуск/остановка перехвата сообщений

procedure TfrmMessages.cmbStartClick(Sender: TObject);

begin

if cmbStart.Caption <> \'Остановить\' then

begin

//Начинаем слежение

lvwMessages.Clear;

//Создаем проекцию файла

hFile := CreateFileMapping(INVALID_HANDLE_VALUE, nil,

PAGE_READWRITE,

0, SizeOf(THookInfo),

strFileMapName);

hook_info := MapViewOfFile(hFile, FILE_MAP_WRITE, 0, 0,

SizeOf(THookInfo));

//Создание ловушки

if InstallHook(wnd, frmMessages.Handle) then

cmbStart.Caption := \'Остановить\'

else

begin

//При ошибке удалим проекцию файла

UnmapViewOfFile(hook_info);

hook_info := nil;

CloseHandle(hFile);

hFile := 0;

MessageBox(Handle, \'Ошибка при создании ловушки\',

PAnsiChar(Application.Title), MB_ICONEXCLAMATION);

end;

end

else

begin

//Заканчиваем слежение (удаляем ловушку и проекцию файла)

RemoveHook();

UnmapViewOfFile(hook_info);

hook_info := nil;

CloseHandle(hFile);

hFile := 0;

cmbStart.Caption := \'Начать слежение\

end;

end;

Как можно увидеть, вся сложность на стороне приложения-шпиона состоит в создании/удалении проекции файла и в вызове двух экспортируемых из библиотеки hook, dll функций. Они подключаются следующим объявлением:

Загрузка...