LRESULT CALLBACK HookProc(int,WPARAM,LPARAM);
HINSTANCE hInstance=  ;
HWND glhHook=NULL;void CTryHookDlg::OnSethook() 
{
glhHook=(HWND)SetWindowsHookEx(WH_KEYBOARD,HookProc, hInstance ,0);
if(glhHook!=NULL) AfxMessageBox("Hook set ok");
}LRESULT CALLBACK HookProc(int nCode,WPARAM wParem,LPARAM lParam)
{
int i=0;
i=nCode;
return CallNextHookEx((HHOOK)glhHook,nCode,wParem,lParam);
}void CTryHookDlg::OnUnhook() 
{
BOOL result;
result=UnhookWindowsHookEx((HHOOK)glhHook);
if(result) AfxMessageBox("Hook unstallation ok");
}是不是非得写到DLL里去?

解决方案 »

  1.   

    上面问题解决了。不过另一个问题
    LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    LRESULT Result =0; 
    // LRESULT Result= CallNextHookEx((HHOOK)glhHook,nCode,wParam,lParam); if(nCode==HC_ACTION)
    {
    AfxMessageBox("Press");
    } return Result;
    }
    这个函数里我不调用LRESULT Result= CallNextHookEx((HHOOK)glhHook,nCode,wParam,lParam);
    为什么按键消息还是被传回去了?
      

  2.   

    CallNextHookEx是进入系统消息循环,不返回,会导致错误的
      

  3.   

    全局钩子要写到DLL里的。否则只能钩自己的,如果自己的都钩不住,说明钩子未正常安装!
      

  4.   

    这个函数里我不调用LRESULT Result= CallNextHookEx((HHOOK)glhHook,nCode,wParam,lParam);
    为什么按键消息还是被传回去了?不是吧,你不调用这个都可以执行成功?是不是安装的全局钩子?????
    如果是的话就要调用,严格上来说,不调用CallNextHookEx()函数也可以,但是会出现一些古怪的问题导至系统死机!!!!!!