这个把KEYDOWN  和 KEYUP  成对出现。。
现在我程序只想执行一遍即可,怎样才能把KEYUP扔掉?!LRESULT WINAPI GetKeyBoardProc(int nCode, WPARAM wParam, LPARAM lParam) {    if(nCode >= HC_ACTION){
       doAction();
    }   return(CallNextHookEx(g_hhook, nCode, wParam, lParam));
}
以上是程序代码。

解决方案 »

  1.   

    可以通过lParam参数来处理,对于WM_KEYUP,这个参数第31位是1,WM_KEYDOWN则第31位是0;
      

  2.   

    后面这个问题不好答,给的代码量太少,一般对于WM_KEYDOWN还是WM_KEYUP的区别,可以将lParam与0x8000相与
      

  3.   

    LRESULT WINAPI GetKeyBoardProc(int nCode, WPARAM wParam, LPARAM lParam) {// 这个函数在DLL里面    if(nCode >= HC_ACTION){
            if(GetKeyState(VK_CONTROL)<0){ g_info.bCtrl = TRUE; }
            if(GetKeyState(VK_SHIFT)<0){ g_info.bShift = TRUE; }
            if(GetKeyState(VK_MENU)<0){ g_info.bAlt = TRUE; }
            g_info.wParam = wParam;
            g_info.lParam = lParam;
            call_back(&g_info);
        }   return(CallNextHookEx(g_hhook, nCode, wParam, lParam));
    }//这个就是刚才的回调函数模型
    int my_key_assess(_KEY_INFO *keyInfo)
    {
        if(keyInfo->bCtrl && keyInfo->wParam == 49){// Ctrl + 1的时候执行
            if((keyInfo->lParam & 0x8000)==1) 
                MessageBox(NULL,L"A",L"A",MB_OK);
        }
        return 0;
    }
    不知道为啥,还是不行。
      

  4.   

    call_back(&g_info); 是回调函数,在画面里面
      

  5.   

    那个回调函数是不管用的。是个失败的东西
    关于丢掉KEYUP问题继续研究。