在网上找到一个不错的方法,帖出来看看 头文件maskkey.h: /**//********************************************************************//**//* 文件名: MaskKey.h *//**//* *//**//* 功能: 标准 DLL 导出函数头文件, 在使用该DLL的程序中包含此文件 *//**//* *//**//* 作者: 卢培培 (goodname008) 时间: 2004.8.21 *//**//* *//**//* BLOG: http://blog.youkuaiyun.com/goodname008 *//**//********************************************************************/DECLSPEC_IMPORTBOOLWINAPIStartMaskKey( LPDWORD lpdwVirtualKey, int nLength, BOOL bDisableKeyboard = FALSE );DECLSPEC_IMPORTBOOLWINAPIStopMaskKey(); 实现文件maskkey.cpp: /**//********************************************************************//**//* 文件名: MaskKey.cpp *//**//* *//**//* 功能: 标准 DLL ---- 利用底层键盘钩子实现屏蔽键盘任意按键 *//**//* *//**//* 作者: 卢培培 (goodname008) 时间: 2004.8.21 *//**//* *//**//* BLOG: http://blog.youkuaiyun.com/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) == 0) return FALSE; g_hHook = NULL; return TRUE;} DEF文件 maskkey.def: EXPORTSStartMaskKey @1StopMaskKey @2