c++实现键盘hook
- 项目中用到监控键盘事件,但是,有一次自己的程序被其他置顶程序把按键事件给过滤了,所以需要添加监控键盘钩子的方法,代码样例如下:
cpp
#include <iostream>
#include <Windows.h>
// 全局键盘钩子回调函数
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode >= 0) {
if (wParam == WM_KEYDOWN) {
KBDLLHOOKSTRUCT* kbdData = reinterpret_cast<KBDLLHOOKSTRUCT*>(lParam);
int keyCode = kbdData->vkCode;
// 在此处处理按键事件,例如输出按下的键码
std::cout << "键码: " << keyCode << std::endl;
// 过滤不想向下传递的按键,直接在这里return即可
// return 1;
}
}
// 调用下一个钩子,如果存在的话
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main() {
// 注册全局键盘钩子
HHOOK hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
if (hook == NULL) {
std::cerr << "无法注册键盘钩子" << std::endl;
return 1;
}
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// 卸载钩子
UnhookWindowsHookEx(hook);
return 0;
}