很多人都知道,如果想在系统范围内屏蔽键盘上的任意按键需要使用全局键盘钩子,然而像win键这样“倔强”的按键又不是普通的键盘钩子就能搞定的。这里我提供一种利用底层键盘钩子屏蔽任意按键(包括win键)的方法,并且作成了.dll动态链接库,方便以后使用。钩子,是一种相对复杂一点的技术,通常用来监视系统中某一类型的事件,这些事件可以与某一线程相关(线程钩子),也可以是系统中的所有线程(全局钩子)。关于钩子的理论,我不想说太多,也无法说太多,因为那不是三言两语就能说清楚的。
本文的重点在于底层键盘钩子的应用,前些天CSDN的VB版有人问如何实现屏蔽win键,说实话,这东西用VB也是可以做到的,只不过全局钩子的钩子函数必须写在标准dll中,而VB只能通过变通的方法做出标准dll,稍微有点麻烦,所以我索性用VC写了一个dll,这样VC、VB或Delphi等等都可以调用,而且我也留出了足够的接口,稍后就会看到。
有一点必须得声明一下,底层键盘钩子有一个半致命的缺点,就是只能在NT及其以上系统中使用,不过好在现在用2000、XP、2003的人绝对不在少数,将来用LongHorn的人估计也少不了,所以这点倒是不用太担心。 :)
好了,闲话少说,源代码在此:
DLL头文件(在VC中使用这个DLL中的函数时,需要包含这个头文件,就像使用API要包含windows.h一样):
/********************************************************************/ /* 文件名: MaskKey.h */ /* */ /* 功能: 标准 DLL 导出函数头文件, 在使用该DLL的程序中包含此文件 */ /* */ /* 作者: 卢培培 (goodname008) 时间: 2004.8.21 */ /* */ /* BLOG: http://blog.csdn.net/goodname008 */ /********************************************************************/
DECLSPEC_IMPORT BOOL WINAPI StartMaskKey( LPDWORD lpdwVirtualKey, int nLength, BOOL bDisableKeyboard = FALSE );
DECLSPEC_IMPORT BOOL WINAPI StopMaskKey(); |
DLL主文件:
/********************************************************************/ /* 文件名: MaskKey.cpp */ /* */ /* 功能: 标准 DLL ---- 利用底层键盘钩子实现屏蔽键盘任意按键 */ /* */ /* 作者: 卢培培 (goodname008) 时间: 2004.8.21 */ /* |