各位大侠!我写了一个MouseHook,但是不能截获住菜单的点击信息(资源管理器的菜单、标准Window的菜单、OFFICE的菜单等),请问我要如何做呢?

解决方案 »

  1.   

    消息钩子吧  
    WM_COMMAND 
      

  2.   

    菜单信息不是鼠标的消息,应该hook消息......
      

  3.   

    大概像这样,安装WH_GETMESSAGE钩子,然后在你自己的函数里处理WM_COMMAND。
    SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, g_hInstance,dwThreadId);
    static LRESULT WINAPI GetMsgProc(int code, WPARAM wParam, LPARAM lParam) {  MSG msg = *(MSG*)lParam;
      if(nCode >= 0)
      {
        switch(msg.message)
        {
        case WM_COMMAND:
    wmId = LOWORD(msg.wParam);
    wmEvent = HIWORD(msg.wParam);
    switch (wmId)
    {
    case IDM_ABORT://在这边处理,具体数值自己用spy观察吧 break;
    default:
    break;
    }
        }
      }
       return(CallNextHookEx(g_hhook, code, wParam, lParam));
    }
    大概应该就是这样了,具体代码你就自己写吧,如果成功请告诉我,呵呵!
      

  4.   

    谢谢大家的热心回复,我已经通过WH_GETMESSAGE、WH_CALLWNDPROC两个钩子,钩取WM_COMMAND、WM_SYSCOMMAND、WM_MENUSELECT可以成功获取大部分的菜单点击信息,但是
    现在还有一个问题,右键菜单(比如在桌面点右键,然后选择“刷新”;在文件上点右键,然后选择“复制”),我到现在还不知道,点击“刷新”、“复制”之后,操作系统向哪个窗口,发送了什么消息??请各位大侠帮忙啊!