柏虎资源网

专注编程学习,Python、Java、C++ 教程、案例及资源

Windows 下开发键盘钩子驱动程序(含源代码和详细步骤)


一、什么是键盘钩子(Keyboard Hook)?



键盘钩子是一种 Windows 提供的消息钩子机制,可拦截系统输入事件,比如键盘按下、释放等操作。在用户态可以使用 SetWindowsHookEx,而在内核态则可以编写键盘驱动程序更底层地监控输入。


本文将以用户态的全局键盘钩子为主,完成一个能记录按键并显示在控制台的程序。





二、开发环境准备


项目

说明

操作系统

Windows 10 / 11

开发工具

Visual Studio 2022

编程语言

C / C++

权限要求

需管理员权限运行





三、实现目标



  1. 安装全局键盘钩子
  2. 拦截所有按键
  3. 将按键输出到控制台或保存日志
  4. 可自定义过滤特定按键






四、核心实现步骤




1. 创建 Win32 控制台应用



在 Visual Studio 中新建一个 Win32 Console App 工程,如命名为 KeyboardHookApp。





2. 核心代码实现


main.cpp


#include <windows.h>

#include <iostream>


HHOOK hKeyHook;


// 键盘钩子回调函数

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {

if (nCode == HC_ACTION) {

KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *)lParam;

if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) {

DWORD vkCode = pkbhs->vkCode;

std::cout << "Key Pressed: " << vkCode << std::endl;

}

}

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

}


int main() {

MSG msg;


// 安装全局钩子

hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, GetModuleHandle(NULL), 0);

if (!hKeyHook) {

std::cerr << "Failed to install hook!" << std::endl;

return 1;

}


std::cout << "Keyboard hook installed. Press ESC to exit." << std::endl;


// 消息循环

while (GetMessage(&msg, NULL, 0, 0)) {

if (msg.message == WM_KEYDOWN && msg.wParam == VK_ESCAPE)

break;

TranslateMessage(&msg);

DispatchMessage(&msg);

}


UnhookWindowsHookEx(hKeyHook);

return 0;

}





3. 编译并运行



  1. 在 Visual Studio 中点击【生成】→【生成解决方案】
  2. 使用管理员权限运行编译后的 KeyboardHookApp.exe






五、注意事项


问题

说明

权限问题

安装全局钩子必须以管理员运行

安全软件拦截

一些杀毒软件会拦截键盘钩子,请添加白名单

钩子无法生效

请确保未在沙盒或远程桌面环境中测试





六、增强功能建议(进阶)



  • 将按键写入文件作为日志
  • 增加时间戳记录每次按键时间
  • 通过热键解除钩子(如 Ctrl+Q)
  • 编写 GUI 版本显示输入历史






七、输出示例


Keyboard hook installed. Press ESC to exit.

Key Pressed: 65 // A

Key Pressed: 83 // S

Key Pressed: 68 // D

Key Pressed: 27 // ESC(退出)





八、总结

本篇文章完整演示了在 Windows 下使用 C++ 和 Visual Studio 2022 开发键盘钩子程序的全过程。通过掌握此类钩子技术,你可以构建键盘监听、快捷键处理、辅助输入系统等工具。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言