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

boyanx3个月前技术教程11


一、什么是键盘钩子(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 开发键盘钩子程序的全过程。通过掌握此类钩子技术,你可以构建键盘监听、快捷键处理、辅助输入系统等工具。

相关文章

七彩虹将星X16 Pro评测:将造新竞,游戏体验新速度

【ZOL中关村在线原创评测】七彩虹的将星系列笔记本以独具一格的外观设计和高性能的配置受到众多游戏玩家关注,作为将星系列的新品,七彩虹将星X16 Pro用上了性能强大的酷睿i7-14650HX和RTX...

台式电脑黑屏不开机或者风扇反复转停怎么办?晓龙教你如何解决

我们经常使用台式电脑的情况下,难免会出现电脑主机黑屏不开机的情况,如果你遇到了台式机黑屏不开机,显示器无信号,又或者风扇反复转停的情况下,先不要着急找维修电脑的人,或许装机之家晓龙可以解决你的问题,让...

微软测试Win11原生剪贴板同步功能,安卓手机秒收PC复制内容

IT之家 9 月 2 日消息,科技媒体 Windows Latest 今天(9 月 2 日)发布博文,报道称微软正在 Windows 11 系统上,测试一项原生剪贴板同步功能,支持用户将 PC 端复制...

电脑键盘无法输入文字的排查与解决方法

当电脑键盘突然 “罢工” 无法输入文字时,可按以下系统性方法逐步排查解决,涵盖从基础硬件检查到深层系统修复的全流程操作。一、基础硬件检查1. 物理连接检测外接键盘:拔下 USB 接口重新插入,尝试更换...

台式机开机嘀嘀响个不停,黑屏不亮,风扇还时转时停这可怎么办?

修台式机对我来说,没有任何挑战性,就是耗时间!刚才修了一台老电脑,是客户13年前在我这里组装的电脑,主板是技嘉P61,CPU是G860,显卡是GTX650。因为长时间不用了,现在加电开机就嘀嘀报警,并...

好用的硬件检测工具:图吧工具箱_图吧工具箱硬盘检测工具

一、下载和安装图吧工具箱是目前比较好用的硬件检测的实用工具箱,其官网地址为:https://www.tbtool.cn/点击下载后跳转到下载页面:点击“立即下载”便开始进行下载,下载后如下所示:接着双...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。