为什么当前程序(有键盘钩子)切换到另一个程序然后按键,再切回来,键盘钩子就不起作用了?
LRESULT __declspec(dllexport)__stdcall  CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))
{
switch(wParam)
{
case 'A':
AfxMessageBox("aaaaa");
break;
}   }  LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
return  RetVal;
}
BOOL __declspec(dllexport)__stdcall installhook(PFCALLBACK Func)
{
hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);
return TRUE;
}
BOOL __declspec(dllexport)__stdcall  UnHook()
{   
BOOL unhooked = UnhookWindowsHookEx(hkb);
return unhooked;
}

解决方案 »

  1.   

    键盘钩子作为dll调用,、、、、、、、
      

  2.   

    #pragma data_seg("Shared")
    HHOOK    hkb=NULL;
    #pragma data_seg()
    #pragma comment(linker, "/section:Shared,rws")LRESULT __declspec(dllexport)__stdcall  CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))
    {
    switch(wParam)
    {
    case 'A':
    AfxMessageBox("aaaaa");
    break;
    }   }  LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
    return  RetVal;
    }
    BOOL __declspec(dllexport)__stdcall installhook(PFCALLBACK Func)
    {
    hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);
    return TRUE;
    }
    BOOL __declspec(dllexport)__stdcall  UnHook()
    {   
    BOOL unhooked = UnhookWindowsHookEx(hkb);
    return unhooked;
    }
      

  3.   

    看这个
    http://www.csdn.net/develop/read_article.asp?id=16499
      

  4.   

    请问#pragma是干麻用的?
    还是不行啊