在键盘钩子的回调中有三个参数:nCode,wParam,lParam
我不是很明白这些参数的作用。
nCode有些资料中是判断其是否大于0,有些又是判断其是否与HC_ACTION相等。究竟它指示的是什么意思?
从wParam,lParam中能否判断功能键状态(Ctrl,Shift,Alt)?应该怎样判断?
而且为什么总是得到两次反应?

解决方案 »

  1.   

    参数就看看MSDN吧。可以用GetKeyState()判断按键的状态。LRESULT CALLBACK KeyboardProc(int code,         // hook code
                                  WPARAM wParam,    // virtual-key code
                                  LPARAM lParam)    // keystroke-message information
    {
        if (code == HC_ACTION)
        {
            if (!(lParam & 0xA0000000))//相应一次
            {
        if (wParam==0x61 || wParam==0x63)//小键盘1,3:LEFT
       {
    if(::GetKeyState(VK_CONTROL) >= 0)//Ctrl键没有按下
    { }
    else
    { }
      

  2.   

    参数就看看MSDN吧。可以用GetKeyState()判断按键的状态。LRESULT CALLBACK KeyboardProc(int code,         // hook code
                                  WPARAM wParam,    // virtual-key code
                                  LPARAM lParam)    // keystroke-message information
    {
        if (code == HC_ACTION)
        {
            if (!(lParam & 0xA0000000))//相应一次
            {
        if (wParam==0x61 || wParam==0x63)//小键盘1,3:LEFT
       {
    if(::GetKeyState(VK_CONTROL) >= 0)//Ctrl键没有按下
    { }
    else
    { }
      

  3.   

    nCode为int型If code is less than zero, the hook procedure must pass the message to the CallNextHookEx function without further processing and should return the value returned by CallNextHookEx. 
      

  4.   

    MSDN都是E文的,本人E文太差,看得糊里糊涂的。
    那HC_ACTION又是什么东西?
    我知道可以用GetKeyState()判断按键的状态,问题是能否从wParam,lParam中获得功能键状态吗?
    wParam和lParam有什么区别吗?
      

  5.   

    看下MSDN那里就有这个介绍
      

  6.   

    上面已经说的很清楚了~~
    注意这里:
    if (!(lParam & 0xA0000000))//相应一次
    这样以后就只有一次反应了~~