TestHook.cpp:    UINT MouseProcess(int idHook,HOOKPROC lpfn,HINSTANCE hmod,DWORD      
                     dwThreadId)
    //钩子处理函数
    {

AFX_MANAGE_STATE(AfxGetStaticModuleState()); HOOK hook;
hook=::SetWindowsHookEx(idHook,lpfn,hmod,dwThreadId);
if(wParam==WM_LBUTTONDOWN)

AfxMessageBox("Mouse's Left Button Is Pressed!");
return 0;

}
TestHook.def:
    MouseProcess @1以下调用dll:    hwnd=::FindWindow(NULL,szCaptionName);

    unsigned long IdProcess;
    unsigned long IdThread;
    IdThread=::GetWindowThreadProcessId(hwnd,NULL);

    HINSTANCE hinstance;
    typedef UINT (STR_FUNC) (int idHook,HOOKPROC lpfn,HINSTANCE     
                             hmod,DWORD dwThreadId);
    STR_FUNC * pFunction;    VERIFY(hinstance=::LoadLibrary(
                    “F:\\Works\\TestHook\\Debug\\testhook.dll"));
    
    VERIFY(pFunction=
           (STR_FUNC*)::GetProcAddress(hinstance,"MouseProcess"));
    
    (*pFunction)(WH_CALLWNDPROCRET,
                (HOOKPROC)pFunction,
                 hinstance,IdThread);    VERIFY(FreeLibrary(hinstance));以上代码编译全通过,可是但我对所监视的窗口单击时,并没有显示对话框,为什么捕获不到消息??????????

解决方案 »

  1.   

    对话框有用到ACTIVEX控件么?
    如果用了要初始化一下.
      

  2.   

    你那是什么鼠标钩子,是设置钩子的参数吧。
    LRESULT CALLBACK MouseProc(
      int nCode,      // hook code
      WPARAM wParam,  // message identifier
      LPARAM lParam   // mouse coordinates
    );HHOOK SetWindowsHookEx(
      int idHook,        // hook type
      HOOKPROC lpfn,     // hook procedure
      HINSTANCE hMod,    // handle to application instance
      DWORD dwThreadId   // thread identifier
    );