CallNextHookEx有何用意?::SetWindowsHookEx参数有何意?通知主窗口,进行过滤是什么意思
问题如题
static LRESULT WINAPI GetMsgProc(int code, WPARAM wParam, LPARAM lParam)
{
return ::CallNextHookEx(g_hHook, code, wParam, lParam);
}
BOOL WINAPI SetHook(BOOL bInstall, DWORD dwThreadId, HWND hWndCaller)
{
BOOL bOk;
g_hWndCaller = hWndCaller;
if(bInstall)
{
g_hHook = ::SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc,
ModuleFromAddress(GetMsgProc), dwThreadId);
bOk = (g_hHook != NULL);
}
else
{
bOk = ::UnhookWindowsHookEx(g_hHook);
g_hHook = NULL;
}
return bOk;
}
int WINAPI hook_recv(SOCKET s, char FAR *buf, int len, int flags)
{
CShareMemory sm("IPPACK_RECEIVE", sizeof(CMessageData) + len, TRUE);
CMessageData *pData = (CMessageData*)sm.GetBuffer();
// 调用原来的函数,接受数据,设置参数
//g_recv.Unhook();
int nRet = ::recv(s, pData->data(), len, flags);
//g_recv.Rehook();
pData->dwThreadId = ::GetCurrentThreadId();
pData->socket = s;
pData->nDataLength = nRet;
// 通知主窗口,进行过滤
::SendMessage(g_hWndCaller, HM_RECEIVE, 0, 0);
// 返回数据
memcpy(buf, pData->data(), pData->nDataLength);
return nRet;
}