我用代码 RegisterHotKey(this->GetSafeHwnd(),xxx, MOD_ALT, VK_F4);都可以屏蔽alt+f4但是用   RegisterHotKey(this->GetSafeHwnd(),xxx, MOD_CONTROL, VK_ESCAPE);却不能屏蔽ctrl+esc键。
请问各位,如何屏蔽ctrl+esc键

解决方案 »

  1.   

    就在pretranslatemessage中就可以啊!BOOL XX::PreTranslateMessage(MSG* pMsg)
    { if (pMsg->message == WM_KEYDOWN)
    {
    if(pMsg->wParam == VK_ESCAPE)//加上CTRL键按下判断即可
    {
    return TRUE;
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }如果要在整个程序或者系统中屏蔽,可以使用键盘钩子进行屏蔽。
      

  2.   

    整个程序可以在最上层的类中添加PreTranslateMessage来进行屏蔽。
    如果是好多程序的话就得一个一个添了
      

  3.   

    HOOK 键盘 WH_KEYBOARD_LL
    http://topic.csdn.net/t/20020610/10/791067.html
      

  4.   

    各位,我按照大家的回复在pretranslatemessage中添加代码:if(pMsg-> message==WM_KEYDOWN)
      {   if(pMsg->wParam == VK_ESCAPE && pMsg->wParam == VK_CONTROL)
          return TRUE;  }  但是没有屏蔽掉啊。请问是哪里出问题了?
      

  5.   

    if(WM_KEYDOWN == pMsg->message)
    {
    if(GetKeyState(VK_ESCAPE) < 0 && GetKeyState(VK_CONTROL) < 0)
    {
    AfxMessageBox(_T("CTRL + ESC"));
    return TRUE;
    }
    }this? 你不是要屏蔽键盘上的Ctrl+ESC组合键 ?
      

  6.   

    VisualEleven,是的。我是要屏蔽键盘上的Ctrl+ESC组合键,就是不让弹出开始菜单。我直接用了你的代码,在pretranslatemessage中。但是还是没有效果啊!还是没有屏蔽
      

  7.   

    我的这个项目是用的单文档模式,在:
    BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 中添加的、。
      

  8.   

    你要用HOOK 键盘按键啊,这样在PreTranslateMessage中这么处理肯定是不行的
      

  9.   

    也可以看看这个
    http://www.vckbase.com/document/viewdoc/?id=424
      

  10.   


    /*
    Windows NT 4.0 Service Pack 3 and Later and Windows 2000
    Applications can disable ALT+TAB or CTRL+ESC by installing a low-level keyboard hook. A low-level keyboard hook (WH_KEYBOARD_LL) is installed by calling SetWindowsHookEx. For more information on Window hooks see the "Hooks" overview in the Platform SDK documentation.The following is a sample low-level keyboard hook procedure that disables CTRL+ESC, ALT+TAB, and ALT+ESC:
    */
    LRESULT CALLBACK LowLevelKeyboardProc (INT nCode, WPARAM wParam, LPARAM lParam)
    {
    // By returning a non-zero value from the hook procedure, the
    // message does not get passed to the target window
    KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
    BOOL bControlKeyDown = 0;switch (nCode)
    {
    case HC_ACTION:
    {
    // Check to see if the CTRL key is pressed
    bControlKeyDown = GetAsyncKeyState (VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1);// Disable CTRL+ESC
    if (pkbhs->vkCode == VK_ESCAPE && bControlKeyDown)
    return 1;// Disable ALT+TAB
    if (pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN)
    return 1;// Disable ALT+ESC
    if (pkbhs->vkCode == VK_ESCAPE && pkbhs->flags & LLKHF_ALTDOWN)
    return 1;break;
    }default:
    break;
    }
    return CallNextHookEx (hHook, nCode, wParam, lParam);
    }
      

  11.   

    还是没弄好。为什么屏蔽alt+f4都能用我顶楼的方法呢