屏蔽键盘任意键的DLL文件制作

来源:互联网 发布:linux php shell exec 编辑:程序博客网 时间:2024/05/22 08:13

在网上找到一个不错的方法,帖出来看看

头文件maskkey.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();

实现文件maskkey.cpp:

 

/********************************************************************/

/* 文件名: MaskKey.cpp                                              */

/*                                                                  */

/* 功能: 标准 DLL ---- 利用底层键盘钩子实现屏蔽键盘任意按键         */

/*                                                                  */

/* 作者: 卢培培 (goodname008)             时间: 2004.8.21           */

/*                                                                  */

/* BLOG: http://blog.csdn.net/goodname008                           */

/********************************************************************/

 

// 导出函数列表

// StartMaskKey

// StopMaskKey

 

#define _WIN32_WINNT  0x0500                   // 设置系统版本, 确保可以使用底层键盘钩子

 

#include 
"windows.h"

 

// 全局变量

LPDWORD       g_lpdwVirtualKey 
= NULL;         // Keycode 数组的指针

int           g_nLength = 0;                   // Keycode 数组的大小

BOOL          g_bDisableKeyboard 
= FALSE;      // 是否屏蔽整个键盘

HINSTANCE     g_hInstance 
= NULL;              // 模块实例句柄

HHOOK         g_hHook 
= NULL;                  // 钩子句柄

 

// DLL 入口函数

BOOL APIENTRY DllMain(HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)

{

     
// 保存模块实例句柄

     g_hInstance 
= (HINSTANCE)hModule;

     

     
// 在进程结束或线程结束时卸载钩子

     
switch (ul_reason_for_call)

     
{

     
case DLL_PROCESS_ATTACH:

         
break;

     
case DLL_THREAD_ATTACH:

         
break;

     
case DLL_PROCESS_DETACH:

     
case DLL_THREAD_DETACH:

         delete g_lpdwVirtualKey;

         
if (g_hHook != NULL) UnhookWindowsHookEx(g_hHook);

         
break;

     }


    
return TRUE;

}


 

// 底层键盘钩子函数

LRESULT CALLBACK LowLevelKeyboardProc(
int nCode, WPARAM wParam, LPARAM lParam)

{

     
// 禁用键盘的某个按键, 如果 g_bDisableKeyboard 为 TRUE 则禁用整个键盘

     
if (nCode == HC_ACTION)

     
{

         
if (g_bDisableKeyboard) return TRUE;

         KBDLLHOOKSTRUCT
* pStruct = (KBDLLHOOKSTRUCT*)lParam;

         LPDWORD tmpVirtualKey 
= g_lpdwVirtualKey;

         
for (int i = 0; i < g_nLength; i++)

         
{

              
if (pStruct->vkCode == *tmpVirtualKey++)

                   
return TRUE;

         }


         

     }


     

     
// 传给系统中的下一个钩子

     
return CallNextHookEx(g_hHook, nCode, wParam, lParam);

}


 

/********************************************************************/

/* 开始屏蔽键盘按键                                                 */

/*                                                                  */

/* 参数:                                                            */

/*            lpdwVirtualKey         Keycode 数组的指针             */

/*            nLength                Keycode 数组的大小             */

/*            bDisableKeyboard       是否屏蔽整个键盘               */

/*                                                                  */

/* 返回值:    TRUE 成功, FALSE 失败                                 */

/********************************************************************/

BOOL WINAPI StartMaskKey(LPDWORD lpdwVirtualKey, 
int nLength, BOOL bDisableKeyboard = FALSE)

{

     
// 如果已经安装键盘钩子则返回 FALSE

     
if (g_hHook != NULL) return FALSE;

     

     
// 将用户传来的 keycode 数组保存在全局变量中

     g_lpdwVirtualKey 
= (LPDWORD)malloc(sizeof(DWORD) * nLength);

     LPDWORD tmpVirtualKey 
= g_lpdwVirtualKey;

     
for (int i = 0; i < nLength; i++)

     
{

         
*tmpVirtualKey++ = *lpdwVirtualKey++;

     }


     g_nLength 
= nLength;

     g_bDisableKeyboard 
= bDisableKeyboard;

     

     
// 安装底层键盘钩子

     g_hHook 
= SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, g_hInstance, NULL);

     
if (g_hHook == NULL) return FALSE;

     
return TRUE;

     

}


 

/********************************************************************/

/* 停止屏蔽键盘按键                                                 */

/*                                                                  */

/* 参数: (无)                                                       */

/*                                                                  */

/* 返回值:    TRUE 成功, FALSE 失败                                 */

/********************************************************************/

BOOL WINAPI StopMaskKey()

{

     
// 卸载钩子

     
if (UnhookWindowsHookEx(g_hHook) == 0return FALSE;

     g_hHook 
= NULL;

     
return TRUE;

}

DEF文件 maskkey.def:

 

EXPORTS

StartMaskKey       @
1

StopMaskKey        @
2
原创粉丝点击