设为首页
联系站长
加入收藏

您的位置: 首页>>IT业界>>互联网>>正文
 低级键盘钩子屏蔽Win键、Alt+Tab键的响应
 日期:2006-1-20 10:12:30  来源:百当软件园

  如果你是基于Windows操作系统做系统集成的,你可能希望你的最终产品独占系统资源。你希望规范用户行为,比如你不希望用户通过按Ctrl+Alt+Del终止某个进程,或者按下Win键弹出开始菜单,或者按下Alt+Tab组合键切换到别的应用程序。笔者已有相关一篇文章《Win2K/NT下屏蔽Ctrl+Alt+Del的响应》,介绍了如何通过GINA编程接口屏蔽Ctrl+Alt+Del的响应。作为续篇,本文将继续介绍屏蔽Win键和Alt+Tab组合键的方法。  
  
  由于这些按键的响应是系统级的,我们不可能简单地通过某个程序来控制它们。因此,我们需要使用微软提供的另外一种编程接口——钩子(Hook)。大家可能已经对钩子很了解了(网上有很多介绍钩子技术和应用的文章)。简单来说,钩子是一种通过替换系统提供的标准接口来截获特定的事件(消息),最终达到改变或增强系统默认行为目的的技术。我们现在的任务,就是要在用户按下Win键或Alt+Tab组合键、但系统还没有响应之前截获它们,然后改变系统的默认行为。很显然,我们要做一个全局钩子(钩子函数放在独立的DLL中实现),而且是个低级键盘钩子(Low  Level  Keyboard    hook)。 

  第一步,钩子DLL的实现。我们首先要定义一个全局数据区(记住这是一个全局钩子),如下(放在cpp文件的上头): 

  #pragma  data_seg("mydata") 
  HHOOK            glhHook            =  NULL;                        //  安装的鼠标钩子句柄 
  HINSTANCE    glhInstance    =  NULL;              //  DLL实例句柄 
  #pragma  data_seg() 

  然后在.def文件中声明这个数据区,如下: 
  SECTIONS  
  mydata  READ  WRITE  SHARED 

  当这个DLL被某个进程载入时,程序从WinMain进入,此时我们需要把模块句柄保存下来,如下: 
  glhInstance  =  (HINSTANCE)  hModule; 

  接下去,我们就要定义两个导出函数,以及钩子的处理函数。我们重点看一下这个钩子处理函数(另外两个导出函数比较简单,只是通过调用SetWindowsHookEx和UnhookWindowsHookEx实现安装/卸载钩子函数;只需注意SetWindowsHookEx第一个参数为WH_KEYBOARD_LL,第四个参数为0)。 

相关文章

·用PB生成GUID解决主键重复
·用PowerBuilder编写邮件应用程序
·PowerBuilder的可执行文件所需的
·PowerBuilder中实现数据窗口动态
·PowerBuilder中实现系统热键功能
·循序渐进学习Power Builder 6.0


阅读排行

·Win 2000不能访问Win XP的原因及
·解析Windows中的帐户和权限功能
·如何共享Windows XP操作系统
·Windows XP Service Pack 1
·通过 Windows XP 注册表自定义您
·Windows 2000 TCP/IP协议概述
·Windows 2000 Server TCP/IP协议
·dos常用命令使用说明
·Windows变慢原因分析及解决方法(
·Windows变慢原因分析及解决方法(
·WINXP下强行关闭“杀”不了的进程
·Windows XP系统注册表的恢复

最新文档

·创业激情需冷静 网络代理选择应理
·域名交易平台亟需规范 预防域名买
·Travel旅游域名即将引发抢注潮 
·从原理深处分析如何预防arp攻击
·突破建站弊端 企业网络营销大有可
·如何区分进程和病毒?
·java的基础知识,如何学好java
·微机原理与接口技术基础知识
·如何解决青少年沉迷网络的问题,
·全面分析主板BIOS报警信号

请您注意:
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·您在本站发表的作品,本站有权在网站内转载或引用
·其他网站如果需要转载 本站文章请在贵站著名来源,谢谢合作