http://blog.csdn.net/linfei2707/article/details/25237671

解决方案 »

  1.   

    Win+L是系统锁屏快捷键,你要拦截?
      

  2.   


    LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)

    BOOL Discard = FALSE; if (nCode == HC_ACTION)
    {
    switch (wParam)
    {

    case WM_SYSKEYDOWN: 
    case WM_SYSKEYUP:
    Discard = TRUE;
    break; case WM_KEYDOWN: 
    case WM_KEYUP:   
    PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
    Discard= 
    //WIN
    (p->vkCode == VK_LWIN)
    ||(p->vkCode == VK_RWIN)

    //Esc + Ctrl
    || ((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0)); if ((p->vkCode ==VK_LWIN&&GetAsyncKeyState(76))!=0
    ||(p->vkCode== VK_RWIN&&GetAsyncKeyState(76))!=0)
    {
    Discard = TRUE;
    }
    break;
    }
    }
    return(Discard? TRUE : CallNextHookEx(NULL, nCode, wParam, lParam));
    }
    全局钩子可以截获WIN+L,在 Discard = TRUE;下断点,则系统正常,没有断点直接运行,则貌似出现系统所有消息往WINDOWS任务栏发,按键盘1则任务栏弹出第一个快捷方式,2则第二个快捷方式...要重新按下WIN+L登录,系统才恢复正常