MFC -- 键盘全局HOOK
2023-03-14 22:59:40 时间
一、新建一个DLL动态链接库
二、创建一个被exe文件调用的函数
BOOL sethook() { hk = SetWindowsHookEx(WH_KEYBOARD, //hook类型,键盘hook KeyboardProc, //回调函数 hM, //第三方的注入dll,全局hook使用,句柄通过主函数获取 0);//线程id,填0表示hook所有程序 if (hk == NULL)//如果创建失败,弹出信息框 { return FALSE; } return TRUE; }
三、创建回调函数
HMODULE hM; HHOOK hk; //键盘hook的回调函数 LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam) { char buf[256]; if (wParam >= 'A' && wParam <= 'Z') { sprintf_s(buf, "%c 被按下", wParam); OutputDebugStringA(buf); } //钩子执行完后执行该函数 return CallNextHookEx(hk, code, wParam, lParam); }
四、通过主函数获取句柄
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { //dll被加载执行,初始化操作 hM = hModule; } break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: { //dll被释放时调用 } break; } return TRUE; }
五、将函数导出
1、右击项目--添加--新建项
2、添加def文件
3、导出函数
LIBRARY
EXPORTS
sethook
4、通过PE软件查看导出函数
六、exe文件调用dll文件函数
1、声明lib文件位置
#pragma comment(lib,"hookdll.lib")
2、声明被调用函数
BOOL sethook();
3、调用函数
void CkeybhookDlg::OnBnClickedHook() { BOOL re = sethook(); if (!re)//如果创建失败,弹出信息框 { AfxMessageBox(L"HOOK失败"); return; } }
相关文章
- 做“程序员”,不做“码农”,有哪些好办法?
- 开源大数据周刊-第52期
- 拿什么去爱你,我的北上广
- 不负好时光——《Netty in Action》中文版《Netty实战》翻译手记
- 别忙着敲代码了,快收下这波安利!
- 什么?你还不知道特拉维夫?!
- 不如到雄县的街头走一走
- Cookies 的跨域脚本攻击 - Github 迁移域名的安全详解
- 解决linux中tracker大量占用CPU的问题
- LINUX修改文件权限
- Linux系统硬盘读写测试
- Pinterest架构:两年内月PV从零到百亿
- 使用top命令查看CPU负载
- Linux压缩那些事儿
- 大型发布会现场的 Wi-Fi 应该如何搭建?
- Ubuntu 系统中通过火狐OS模拟器轻松体验 Firefox OS
- 安装 Ubuntu 13.04 后要做的六件事
- 成人网站性能提升20倍之经验谈
- 优秀的开源系统恢复软件
- Libreoffice 4.0.3 发布 – PPA 安装源