#define STRICT #define _WIN32_WINNT 0x0503 //Windows Server 2003 SP1, Windows XP SP2 #define WIN_32_LEAN_AND_MEAN #include #include "HookDLL.h" #pragma data_seg("Shared") HWND hwnd_controller = NULL; HWND hwnd_target = NULL; HHOOK CBT_hook = NULL; HHOOK KB_hook = NULL; HHOOK MOUSE_hook = NULL; #pragma data_seg() #pragma comment(linker, "/section:Shared,rws") // Global variabeles HINSTANCE hDLL = NULL; /* ------------------------------------------- Map for CBT messages WM_APP + nCode ------------------------------ Msg ID | nCode ------------------------------ * HCBT_ACTIVATE | 0 * HCBT_CLICKSKIPPED | 1 * HCBT_CREATEWND | 2 * HCBT_DESTROYWND | 3 * HCBT_KEYSKIPPED | 4 * HCBT_MINMAX | 5 * HCBT_MOVESIZE | 6 * HCBT_QS | 7 * HCBT_SETFOCUS | 8 * HCBT_SYSCOMMAND | 9 -----------------------------------------*/ BOOL WINAPI DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { hDLL = hModule; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; } return TRUE; } LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam) { if( (nCode >= 0) && (nCode != HCBT_CLICKSKIPPED) && (nCode != HCBT_KEYSKIPPED) && (nCode != HCBT_QS) && (nCode != HCBT_SYSCOMMAND) ) { SendMessage(hwnd_controller, WM_APP + MSGID_CBT + nCode, wParam, lParam); } return CallNextHookEx(0, nCode, wParam, lParam); } LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode >= 0) { SendMessage(hwnd_controller, WM_APP + MSGID_KB + nCode, wParam, lParam); } return CallNextHookEx(0, nCode, wParam, lParam); } LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode >= 0) { if(wParam == WM_LBUTTONDOWN) { SendMessage(hwnd_controller, WM_APP + MSGID_MOUSE + 0, ((MOUSEHOOKSTRUCT *)lParam)->pt.x, ((MOUSEHOOKSTRUCT *)lParam)->pt.y); } } return CallNextHookEx(0, nCode, wParam, lParam); } void SetControllerHwnd( HWND hWnd ) { hwnd_controller = hWnd; } void SetTargetHwnd( HWND hWnd ) { hwnd_target = hWnd; } bool InstallHook( int hook_type, DWORD thread_id ) { switch (hook_type) { case WH_CBT: CBT_hook = SetWindowsHookEx( hook_type, (HOOKPROC) CBTProc, hDLL, thread_id ); break; case WH_KEYBOARD: KB_hook = SetWindowsHookEx( hook_type, (HOOKPROC) KeyboardProc, hDLL, thread_id ); break; case WH_MOUSE: MOUSE_hook = SetWindowsHookEx( hook_type, (HOOKPROC) MouseProc, hDLL, thread_id ); break; } return true; } bool UninstallHook(void) { if( CBT_hook ) { UnhookWindowsHookEx(CBT_hook); } if( KB_hook ) { UnhookWindowsHookEx(KB_hook); } if(MOUSE_hook) { UnhookWindowsHookEx(MOUSE_hook); } return true; }