低级键盘钩子屏蔽Win键、Alt+Tab键的响应

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 22:56:55
QQ病毒 腾讯QQ空间代码专题 PPT教程专题 ADSL应用面面俱到
Fireworks教程专题 计算机和网络技术基础知识 校园网专题 网吧技术专题

  //  低级键盘钩子处理函数 
  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:   
                         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)); 
  } 

  大家可以看到,当程序发现按下的是Win键或者Alt+Tab组合键,就不再调用CallNextHookEx函数将这个消息传递下去。以此,我们做到了屏蔽这些按键的响应。  
  
  第二步,钩子DLL的测试程序。在VC中创建一个基于对话框的应用程序。通过调用LoadLibrary("KeyMask.dll")载入钩子DLL,通过GetProcAddress(m_hDll,"StartKeyMask")和GetProcAddress(m_hDll,"StopKeyMask")导入两个安装/卸载钩子的函数。在主对话框上定义两个按钮分别调用这两个函数,如下:

  当按下“Start_Hook”按钮,我们的钩子函数就起作用了。试一下Win键,或者Alt+Tab组合键,没反应了吧?!“Stop_Hook”按钮可以解除这个钩子。  

  讲到这,大家可能觉得钩子其实也是很容易的东西。是的,钩子容易使用,而且功能强大。但是,笔者建议,如果不是十分必要,请尽量少用钩子。因为钩子在实现强大功能的同时,可能也会严重降低你系统的性能。有时候是得不偿失的! 

上一页  [1] [2] 

Tags:

作者:佚名
分享到: 微信 更多