Фильтр WH_CALLWNDPROC
Приведем прототип функции фильтра типа WH_CALLWNDPROC (для функции можно использовать любое имя):
LRESULT CALLBACK CallWndProc( int code, // код действия WPARAM wParam, // флаг текущей задачи LPARAM lParam) // адрес структуры с сообщением
Функция CallWndProc обязательно должна находиться DLL-библиотеке. Она вызывается операционной системой Windows после вызова функции SendMessage, но перед тем, как сообщение попадет в функцию окна, для которой оно предназначено. Фильтр может изменить любые параметры сообщения или его код.
Если код действия (параметр code) меньше нуля, функция фильтра должна вызвать функцию CallNextHookEx, не изменяя перехваченное сообщение.
Если сообщение послано текущей задачей, значение параметра wParam отлично от нуля, в противном случае оно равно NULL.
Параметр lParam содержит указатель на структуру, которая описывает перехваченное сообщение (эта структура на описана в файле windows.h):
struct _Msg { LPARAM lParam; // параметр lParam сообщения WPARAM wParam; // параметр wParam сообщения UINT uMsg; // код сообщения HWND hWnd; // идентификатор окна, для которого }; // предназначено сообщение
Функция фильтра должна всегда возвращать нулевое значение.
Заметим, что после установки фильтра WH_CALLWNDPROC производительность операционной системы Windows заметно уменьшится, поэтому использование такого фильтра оправдано только при отладке приложения или для создания приложений, специально предназначенных для отладки других приложений Windows.