Исходный код
Демонстрационный проект
Данный файл содержит код, облегчающий задачу постановки Windows-хуков. Он рассчитан на применение в коде, написанном на языках C и C++. За подробностями применения данного кода можно обратиться к статье «Создание инструментария для Windows-хуков (C и C++)».
DECLARE_LOCAL_HOOK( hook_message, HookProc ) SET_LOCAL_HOOK( hook_message ) UNHOOK_LOCAL_HOOK( hook_message ) IS_VALID_HOOK( hook_message ) |
DECLARE_GLOBAL_HOOK( hook_message, HookProc ) DECLARE_HOOK_DLL( hook_messge ) LOAD_HOOK_DLL( hook_message, libname ) UNLOAD_HOOK_DLL( hook_message ) IS_VALID_DLL_HOOK( hook_message ) |
Параметры макросов:
hook_message – тип хука
HookProc – имя процедуры-обработчика системных сообщений
libname – имя динамической библиотеки, содержащей код глобального хука
// CHookBaseT class // Тела методов класса не приводятся по причине значительного объема кода // Полный код см. в HookHlpr.h template <class T, class TData = CHookBaseData> class CHookBaseT { private: CHookThunk m_thunk; int m_nCode; protected: TData* m_pData; private: static LRESULT WINAPI _HookProc( T* pThis, WPARAM wParam, LPARAM lParam ); public: CHookBaseT() : m_pData(NULL){} CHookBaseT( TData* pData ) : m_pData(pData){} void Init(); void SetHookHandle( HHOOK hHook ); void SetHookType( int nHookType ); BOOL SetHook( HINSTANCE hInst, DWORD dwThreadId ); void Unhook(); BOOL IsValid() const; inline HHOOK GetHookHandle() const; inline int GetHookType() const; inline int GetCode() const; void AttachData( TData* pData ); }; |
ALLOCATE_GLOBAL_HOOK_OBJ( hook_class_name, hook_obj_name, data_class_name, data_obj_name ) |
Параметры макроса:
hook_class_name – имя класса, порожденного от CHookBaseT<> и реализующего процедуру-обработчик хука.
hook_obj_name – имя экземпляра класса хука
data_class_name - имя класса данных хука
data_obj_name – имя экземпляра класса данных хука