我想写一个程序,要让所有运行着的windows程序都不再响应键盘消息..
有哪些API可用??
请高人指点一下.

解决方案 »

  1.   

    用全局键盘钩子,屏蔽按键消息回调函数参考:LRESULT CALLBACK hookproc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    if(nCode<0)
    {
    return CallNextHookEx(hHook,nCode,wParam,lParam);
    }
    if(nCode==HC_ACTION)
    {
    return TRUE;  //屏蔽键盘按键消息
    }
    return CallNextHookEx(hHook,nCode,wParam,lParam);
    }
    如果你要屏蔽WIN和其他的一些系统组合键,需要使用低级键盘钩子回调函数: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));
    }
      

  2.   

    用全局键盘钩子
    http://dev.csdn.net/article/28/article/33/33819.shtm