Winodws HOOK 之键盘钩子

来源:互联网 发布:.ds store windows 编辑:程序博客网 时间:2024/05/22 09:03

        钩子(HOOK)是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息或特定事件(比如键盘和鼠标事件等),而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

        以下是利用键盘钩子HOOK键盘操作的示例代码,实现了当捕获到键盘按键按下时会播放一段声音。

#include <windows.h>#include <tchar.h>#include <Mmsystem.h>#pragma comment(lib,"Winmm.lib");HHOOK hHook;// 键盘钩子回调函数LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);int APIENTRY _tWinMain(HINSTANCE hInstance,   HINSTANCE hPrevInstance,   LPTSTR    lpCmdLine,   int       nCmdShow){MSG msg;// 创建低级键盘钩子hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);// 主消息循环:while (GetMessage(&msg, NULL, 0, 0));// 卸载低级键盘钩子UnhookWindowsHookEx(hHook);return (int) msg.wParam;}// 低级键盘钩子回调函数LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam){KBDLLHOOKSTRUCT *kbllHookStruct = (KBDLLHOOKSTRUCT*)lParam;// 如果是按键按下if(wParam == WM_KEYDOWN){// 播放声音PlaySound(_T("shake.wav"),NULL, SND_FILENAME | SND_ASYNC);}TCHAR str[255]={0};_stprintf(str,_T("Msg Code = 0x%x, vkCode = %d\n"), wParam, kbllHookStruct->vkCode);OutputDebugString(str); // 将键盘消息传递给下一个钩子return CallNextHookEx(hHook, nCode, wParam, lParam);}


 

 

原创粉丝点击