回掉里只需写一行return 1就可以了 写全局钩子 锁定键盘和鼠标的钩子 DLL端 // HOOK.cpp : Defines the entry point for the DLL application. //#include "stdafx.h" #include "HOOK.h" #include "mmsystem.h" #define _WIN32_WINNT 0x0500 #include <windows.h> #include <winuser.h> HINSTANCE hInstance; HHOOK hhkKeyboard; HHOOK hhMouseHook;BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } hInstance=(HINSTANCE)hModule; return TRUE; } // This is an example of an exported variable HOOK_API int nHOOK=0;// This is an example of an exported function. HOOK_API int fnHOOK(void) { return 42; }// This is the constructor of a class that has been exported. // see HOOK.h for the class definition CHOOK::CHOOK() { return; }LRESULT LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { //可以加入一些释放键盘的代码return 1 }LRESULT LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) { //可以加入一些释放鼠标的代码 return 1 }HOOK_API BOOL EnableKeyboardCapture()//设定钩子用来锁定键盘鼠标 { if (!(hhkKeyboard=SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)LowLevelKeyboardProc, hInstance, 0))) return FALSE; if (!(hhMouseHook=SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)LowLevelMouseProc, hInstance, 0))) return FALSE;; return TRUE; }HOOK_API BOOL DisableKeyboardCapture()//释放键盘和鼠标 { UnhookWindowsHookEx(hhMouseHook); return UnhookWindowsHookEx(hhkKeyboard); }------------------------------------------------- DLL端编译器(VC6)C/C++属性页加入环境变量HOOK_EXPORTS //头文件定义 HOOK.h ------------------------------------------------------------ #ifdef HOOK_EXPORTS #define HOOK_API __declspec(dllexport) #else #define HOOK_API __declspec(dllimport) #endif HOOK_API BOOL EnableKeyboardCapture(); HOOK_API BOOL DisableKeyboardCapture(); // This class is exported from the HOOK.dll class HOOK_API CHOOK { public: CHOOK(void); // TODO: add your methods here. };extern HOOK_API int nHOOK;HOOK_API int fnHOOK(void);应用程序端只要加入HOOK.H和HOOK.lib就行了,然后按自己要求调用 EnableKeyboardCapture(); DisableKeyboardCapture();最后提醒一句,在没有加入释放键盘鼠标的代码前,不要编译运行,否则后果自负
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HC_ACTION)
{
for(UINT i = 0; i < 17; i++)
{
switch(uHookMouseType & (UINT)pow(2, i))
{
case MOUSE_L:
switch(wParam)
{
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
return 1;
break;
}
break;
case MOUSE_R:
switch(wParam)
{
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
return 1;
break;
}
break;
case MOUSE_ALL:
return 1;
break;
}
}
} return ::CallNextHookEx(hhMouse, nCode, wParam, lParam);
}
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HC_ACTION)
{
switch(wParam)
{
case WM_KEYDOWN:
case WM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
PKBDLLHOOKSTRUCT pHook = (PKBDLLHOOKSTRUCT)lParam;
for(UINT i = 0; i < 17; i++)
{
switch(uHookKeyType & (DWORD)pow(2, i))
{
case KEY_ESC:
if((pHook->vkCode == VK_ESCAPE) &&
(!(::GetKeyState(VK_CONTROL) & 0x8000)))
{
if(pMainWnd && !bFlagEsc)
{
if(CWnd::GetActiveWindow() == pMainWnd)
{
return 1;
}
}
else
{
return 1;
}
}
break;
case KEY_ALTESC:
if((pHook->vkCode == VK_ESCAPE) && (pHook->flags & LLKHF_ALTDOWN))
{
return 1;
}
break;
case KEY_ALTTAB:
if((pHook->vkCode == VK_TAB) && (pHook->flags & LLKHF_ALTDOWN))
{
return 1;
}
break;
case KEY_CTRLESC:
if((pHook->vkCode == VK_ESCAPE) &&
(::GetKeyState(VK_CONTROL) & 0x8000))
{
return 1;
}
break;
case KEY_LWIN:
if(pHook->vkCode == VK_LWIN)
{
return 1;
}
break;
case KEY_RWIN:
if(pHook->vkCode == VK_RWIN)
{
return 1;
}
break;
case KEY_TAB:
if(pHook->vkCode == VK_TAB)
{
return 1;
}
break;
case KEY_APPS:
if(pHook->vkCode == VK_APPS)
{
if(pMainWnd && !bFlagApps)
{
if(CWnd::GetActiveWindow() == pMainWnd)
{
if(wParam == WM_KEYUP)
{
if((iMenuPos > -1) || (pShortMenu))
{
//消除菜单渐出现象
::Sleep(250);
//隐性地调用Bonus.dll的CWndOP::ShortMenu
//显示快捷菜单
CWndOP *pWndOP = (CWndOP*)pMainWnd;
pWndOP->ShortMenu(iMenuPos, pShortMenu);
}
else
{
return 1;
}
}
else
{
return 1;
}
}
}
else
{
return 1;
}
}
break;
case KEY_PRINT:
if(pHook->vkCode == VK_PRINT)
{
return 1;
}
break;
case KEY_SNAPSHOT:
if(pHook->vkCode == VK_SNAPSHOT)
{
return 1;
}
break;
case KEY_PAUSE:
if(pHook->vkCode == VK_PAUSE)
{
return 1;
}
break;
case KEY_ALL:
return 1;
break;
case KEY_ALTF4:
if((pHook->vkCode == VK_F4) && (pHook->flags == LLKHF_ALTDOWN))
{
return 1;
}
break;
}
}
break;
}
} return ::CallNextHookEx(hhKey, nCode, wParam, lParam);
}
http://www.aslike.net
写全局钩子
锁定键盘和鼠标的钩子
DLL端
// HOOK.cpp : Defines the entry point for the DLL application.
//#include "stdafx.h"
#include "HOOK.h"
#include "mmsystem.h"
#define _WIN32_WINNT 0x0500 #include <windows.h>
#include <winuser.h>
HINSTANCE hInstance;
HHOOK hhkKeyboard;
HHOOK hhMouseHook;BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
hInstance=(HINSTANCE)hModule;
return TRUE;
}
// This is an example of an exported variable
HOOK_API int nHOOK=0;// This is an example of an exported function.
HOOK_API int fnHOOK(void)
{
return 42;
}// This is the constructor of a class that has been exported.
// see HOOK.h for the class definition
CHOOK::CHOOK()
{
return;
}LRESULT LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
//可以加入一些释放键盘的代码return 1
}LRESULT LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
//可以加入一些释放鼠标的代码
return 1
}HOOK_API BOOL EnableKeyboardCapture()//设定钩子用来锁定键盘鼠标
{
if (!(hhkKeyboard=SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)LowLevelKeyboardProc, hInstance, 0)))
return FALSE;
if (!(hhMouseHook=SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)LowLevelMouseProc, hInstance, 0)))
return FALSE;;
return TRUE;
}HOOK_API BOOL DisableKeyboardCapture()//释放键盘和鼠标
{
UnhookWindowsHookEx(hhMouseHook);
return UnhookWindowsHookEx(hhkKeyboard);
}-------------------------------------------------
DLL端编译器(VC6)C/C++属性页加入环境变量HOOK_EXPORTS
//头文件定义
HOOK.h
------------------------------------------------------------
#ifdef HOOK_EXPORTS
#define HOOK_API __declspec(dllexport)
#else
#define HOOK_API __declspec(dllimport)
#endif HOOK_API BOOL EnableKeyboardCapture();
HOOK_API BOOL DisableKeyboardCapture();
// This class is exported from the HOOK.dll
class HOOK_API CHOOK {
public:
CHOOK(void);
// TODO: add your methods here.
};extern HOOK_API int nHOOK;HOOK_API int fnHOOK(void);应用程序端只要加入HOOK.H和HOOK.lib就行了,然后按自己要求调用 EnableKeyboardCapture();
DisableKeyboardCapture();最后提醒一句,在没有加入释放键盘鼠标的代码前,不要编译运行,否则后果自负