最近在搞键盘消息的东西,看了一篇文章,觉得不错,拿来跟大家一块分享下
1 问题的引入
随着计算机的广泛应用,计算机软件得到了长远发展。在软件开发过程中,希望产品独占系统资源,或者希望规范用
户行为,例如不希望用户通过Alt + Tab 组合键切换到其他应用程序或者通过Win 键弹出开始菜单。游戏娱乐也已慢慢
成为人们生活中的一部分,其中有些软件是在全屏模式下运行,这时误按Win 键或Alt + Tab 时会造成麻烦。在工程测
试时,有些时候也需要屏蔽部分按键,以减少误操作。然而诸如Win 键、Alt + Tab 组合键、Alt + Esc 组合键等的按
键响应属于系统级的,不能简单地通过重载消息处理函数的方法来对其进行屏蔽。那么如何实现系统范围内屏蔽这些
按键呢?在此介绍了在VC6.0 环境下,通过HOOK (钩子) 技术实现Window NT 及以上系统屏蔽键盘按键的方法。
2 HOOK 及相关API
2.1 HOOK
HOOK 技术即钩子技术。简单地说,钩子是一种通过替换系统提供的标准接口来截获特定的事件(消息),最终达
到改变或增强系统默认行为目的的技术。钩子通过钩子过程实现需求,钩子过程实际上是一个处理消息的程序段(函
数),通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦
即钩子过程先得到控制权。这时钩子过程既可以加工处理(改变) 该消息,也可以不作处理而继续传递该消息,还
可以强制结束该消息的传递。
每一个HOOK 都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。
钩子分为本地钩子(LOCAL HOOK) 和远程钩子(REMOTEHOOK),又称局部钩子和全局钩子。LOCALHOOK
是指程序HOOK 的是本程序中的线程。REMOTE HOOK 有