一个消息钩子问题。我怎么勾不到我想要的消息呢?代码如下,高手请指点!
#pragma data_seg("HKDATA")
HHOOK g_hHook=NULL;
int g_nTranslateMode=0;
#pragma data_seg()
HWND m_hMain = NULL;
#pragma comment(linker, "/SECTION:HKDATA,RWS")
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HC_ACTION)
{
CWPSTRUCT * pcw = reinterpret_cast<CWPSTRUCT *>(lParam);
if (pcw->hwnd == m_hMain)
{
FILE *fp= fopen("hookmsg.txt","a");
fprintf(fp,"Message: %d\n",pcw->message);
fclose(fp);
}
if(pcw->message == WM_RBUTTONDOWN)
{
::MessageBeep(MB_ICONEXCLAMATION);
::MessageBox(NULL,"Right mouse button clicked","Message hook test",MB_OK);
}
}
return ::CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
BOOL HookOn(HWND hTarget)
{
if (g_hHook != NULL)
return TRUE;
if (m_hMain == NULL)
m_hMain = hTarget;
g_hHook = ::SetWindowsHookEx(WH_CALLWNDPROC, HookProc,theApp.m_hInstance, 0);
return (g_hHook!=NULL);
}
BOOL HookOff(void)
{
if(g_hHook == NULL)
return TRUE;
BOOL bRet = ::UnhookWindowsHookEx(g_hHook);
g_hHook=NULL;
return bRet;
}
我做一个SDI测试程序,但是在文件中记录的消息是WM_NCHITTEST WM_SETCURSOR WM_KILLFOCUS WM_IME_SETCONTEXT WM_DESTROY WM_NVDESTROY
就是没有我要的WM_RBUTTONDOWN!!!请问这是怎么回事?