我用一个CHotKeyCtrl来设置热键,但是我发现不能捕获'win'键,为什么,有什么方法补救吗?

解决方案 »

  1.   

    因为它是系统键,一个重量级的解决办法:
    http://www.sysinternals.com/Utilities/Ctrl2Cap.html
    也可以试试keyboard hook
      

  2.   

    可以用低级键盘钩子来屏蔽win键
    =========================
    屏蔽WIN、ALT+TAB、CTRL+ESC键的低级键盘钩子回调函数:LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
        BOOL fEatKeystroke = FALSE;
        PKBDLLHOOKSTRUCT p = NULL;    if (nCode == HC_ACTION) 
        {
            p = (PKBDLLHOOKSTRUCT) lParam;
            switch (wParam) 
            {
                case WM_KEYDOWN: 
                    // Backdoor to user information
                    if (p->vkCode == VK_F8)
                    {
                        ::MessageBox(NULL,"Let's make things better and better!\n","HQ Tech",MB_OK);
                        break;
                    }
                case WM_SYSKEYDOWN:
                case WM_KEYUP:    
                case WM_SYSKEYUP: 
                    fEatKeystroke = (p->vkCode == VK_LWIN) || (p->vkCode == VK_RWIN) ||  // 屏蔽Win
                                    // 屏蔽Alt+Tab
                                    ((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||
                                    // 屏蔽Alt+Esc
                                    ((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||
                                    // 屏蔽Ctrl+Esc
                                    ((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0));
                    break;
                default:
                    break;
          }
        }  return (fEatKeystroke ? TRUE : CallNextHookEx(glhHook,nCode,wParam,lParam));
    }安装及卸载钩子:void _stdcall StartKeyMask()
    {
        // 安装钩子
        glhHook = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,glhInstance,0);
    }void _stdcall StopKeyMask()
    {
        // 卸载钩子
        if (glhHook!=NULL)
            UnhookWindowsHookEx(glhHook);
    }
      

  3.   

    那有没有哪个控件做到这点呢,我的程序上希望用CHotKeyCtrl控件来设置热键,同时用户也可能用‘win’键。-----------------
    ----VC+BCB-------
    -----------------
      

  4.   

    那有没有哪个控件做到这点呢,我的程序上希望用CHotKeyCtrl控件来设置热键,同时用户也可能用‘win’键。-----------------
    ----VC+BCB-------
    -----------------
      

  5.   

    不知道在pretranslatemessage中能否截获win键。。