下面是我自己写的键盘钩子的回调函数,在一个Dll里,钩子是全局钩子:
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)

    if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))
    {
       switch(wParam)//键盘按键标识
        {
        case 'A':MessageBox(0,"A","nihao",0);break; //当字母键A被按下
        case 'B':MessageBox(0,"B","nihao",0);break;
        default:CallNextHookEx(hkb,nCode,wParam,lParam);
        }
     }
     LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam ); 
     return RetVal;
}
不知道为什么当自己的exe为活动窗口时,执行正常;当自己的exe为后台程序时,总是出现非法操作!
哪位高手给我个解决方法?

解决方案 »

  1.   

    确定CallNextHookEx里面的hkb是正确的?SetHook的时候没有消息传到前台窗口?
      

  2.   

    怎么确定CallNextHookEx的hkb是否正确?你说的正确是什么意思?
      

  3.   

    hkb是否的确指向SetHook传回的地址,不过好像这个并不影响结果,但是如果SetHook的时候但是SetHook没有结束的时候有消息传到窗口会出错。因为我在子类化progman的时候曾经出国这种错误。至于SetHook的时候会不会因为这个出错不大清楚,具体要看错误是什么