在MFC对话框上挂一个钩子,我想钩取对话框上的消息,如:WM_MOUSEMOVE,但是失败了,不知道问题出在哪,请高手帮忙看看。
//全局钩子句柄
HHOOK hhk;//钩子处理函数
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPSTRUCT* pCS = (CWPSTRUCT*)lParam;
if(pCS->message == WM_MOUSEMOVE)
{
AfxMessageBox("钩到鼠标移动消息!");
}
return ::CallNextHookEx(theApp.m_hhk, nCode, wParam, lParam);
}//在OnInitDialog中设置钩子
hhk = ::SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, NULL, ::GetCurrentThreadId());

解决方案 »

  1.   

    难道是在OnInitDialog中不能设置Hook???看看这里成功没有
    hhk = ::SetWindowsHookEx你把他改到某个button的响应函数中试试
      

  2.   

    刚试验了,将::SetWindowsHookEx改到某个button的响应函数中执行,还是不行
      

  3.   

    关键是,这里成功没有?
    hhk = ::SetWindowsHookEx 
      

  4.   

    ::SetWindowsHookEx 执行是成功的, 我调试发现, CallWndProc 只能钩到一个消息,该消息的值是0x036A,在WinUser.h中找不到此消息的定义,郁闷
      

  5.   

    只处理鼠标的话,换个钩子
    SetWindowsHookEx(WH_MOUSE, 
    另外不要在mousemove中messagebox,用buttondown试试
      

  6.   

    trace了一些,n多消息都能hook到,就是没有鼠标消息
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000004e
    msg=0x00000014
    msg=0x00000135
    msg=0x0000004e
    msg=0x0000004e
    msg=0x0000000e
    msg=0x0000000d
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x0000004e
    msg=0x00000014
    msg=0x00000135
    msg=0x0000004e
    msg=0x0000004e
    msg=0x0000000e
    msg=0x0000000d
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000004e
    msg=0x00000014
    msg=0x00000135
    msg=0x0000004e
    msg=0x0000004e
    msg=0x0000000e
    msg=0x0000000d
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000020
    msg=0x00000020
    msg=0x0000036a
    msg=0x00000084
    msg=0x00000021
    msg=0x00000021
    msg=0x00000020
    msg=0x00000020
    msg=0x00000087
    msg=0x000000f3
    msg=0x00000135
    msg=0x0000004e
    msg=0x0000004e
    msg=0x0000000e
    msg=0x0000000d
    msg=0x0000036a
    msg=0x000000f3
    msg=0x00000215
    msg=0x00000111
    msg=0x00000008
    msg=0x00000287
    msg=0x00000281
    msg=0x00000281
    msg=0x00000281
    msg=0x00000287
    msg=0x00000281
    msg=0x00000281
    msg=0x00000281
    msg=0x00000007
    msg=0x00000046
    msg=0x00000047
    msg=0x00000046
    msg=0x00000002
    msg=0x00000002
    msg=0x00000002
    msg=0x00000002
    msg=0x00000002
    msg=0x00000082
    msg=0x00000002
    msg=0x00000082
    msg=0x00000082
    msg=0x00000082
    msg=0x00000082但是用spy++就能看到mousemove之类的消息
      

  7.   

    终于钩到所有窗口消息了,鼠标消息应该用WH_MOUSE,窗口消息用WH_CALLWNDPROC。