DWORD HookProc(HMODULE hModule, PCHAR szProc, DWORD dwHookAddr) { DWORD pProcAddr = (DWORD) GetProcAddress(hModule, szProc); if (pProcAddr == NULL) return NULL; // function doesn't exists in current process return HookProc (pProcAddr, dwHookAddr); }
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) { DWORD wso; if ( (nCode == HC_ACTION) && ((wParam == WM_MOUSEMOVE) || (wParam == WM_NCMOUSEMOVE)) ) { wso = WaitForSingleObject(hSynhroMutex, 0); if (wso == WAIT_OBJECT_0 || wso == WAIT_ABANDONED) { HookProc( &(((PMOUSEHOOKSTRUCT)lParam)->pt) ); ReleaseMutex(hSynhroMutex); } } return CallNextHookEx(GlobalData->g_hHook, nCode, wParam, lParam); }
/* * SendMessage Hook: */ LRESULT __declspec(dllexport) CALLBACK CallWndProc(INT hc, WPARAM wParam, LPARAM lParam) { PCWPSTRUCT pcwps = (PCWPSTRUCT)lParam; if (pcwps) { int rv = HookProc(hc, &pcwps->hwnd, &pcwps->message, &pcwps->wParam, &pcwps->lParam); if (rv != -1) return rv; } /* * CallNextHookEx apparently ignores the hhook argument, so pass NULL */ return CallNextHookEx(NULL, hc, wParam, lParam); }
/* * PostMessage Hook: */ LRESULT __declspec(dllexport) CALLBACK GetMsgProc(INT hc, WPARAM wParam, LPARAM lParam) { PMSG pmsg; pmsg = (PMSG)lParam; if (pmsg) { int rv = HookProc(hc, &pmsg->hwnd, &pmsg->message, &pmsg->wParam, &pmsg->lParam); if (rv != -1) return rv; } /* * CallNextHookEx apparently ignores the hhook argument, so pass NULL */ return CallNextHookEx(NULL, hc, wParam, lParam); }
LRESULT CALLBACK GetMessageHookProc(int nCode, WPARAM wParam, LPARAM lParam) { PMSG pMsg; DWORD wso; if( nCode == HC_ACTION && wParam == PM_REMOVE ) { pMsg = (PMSG)lParam; if( pMsg && ( pMsg->message == WM_MOUSEMOVE || pMsg->message == WM_NCMOUSEMOVE ) ) { wso = WaitForSingleObject(hSynhroMutex, 0); if (wso == WAIT_OBJECT_0 || wso == WAIT_ABANDONED) { POINT pt; pt.x = GET_X_LPARAM( pMsg->lParam ); pt.y = GET_Y_LPARAM( pMsg->lParam ); if( pMsg->message == WM_MOUSEMOVE && pMsg->hwnd != NULL ) ClientToScreen( pMsg->hwnd, &pt ); HookProc( &pt ); ReleaseMutex(hSynhroMutex); } } } return CallNextHookEx(GlobalData->g_hHook, nCode, wParam, lParam); }
DWORD HookProc(PCHAR szModule, PCHAR szProc, DWORD dwHookAddr) { HMODULE module = GetModuleHandle(szModule); return HookProc (module, szProc, dwHookAddr); }