前言
终于学到了钩子这里,来做一个总结
正文
简介
通俗的来说,钩子相当于一个海关上的检查官,拥有检查程序与系统交换信息的检查权限,一旦他发现你携带的信息有问题,他就会做出相应的行动。
一般来说,钩子通过dll注入来实现(网上有不用注入的钩子教程,可惜我没成功),程序通过调用setWindowsHookEx函数,来实现钩子程序的注入。
SetwindowsHookEX()
HHOOK SetWindowsHookExA(
int idHook,
HOOKPROC lpfn,
HINSTANCE hmod,
DWORD dwThreadId
);
第一个参数表征钩子的类型,但钩子的类型是微软规定好的,你只能选一种,自己不能乱写。
第二个参数是钩子执行程序,即当钩子勾到所需信息时运行的程序,
第三个参数是要注入的dll句柄
第四个参数是想要挂载的线程ID,如果该参数为0,则表明钩子是一个全局钩子
问题
1. 注入程序卡死,程序无法退出
我使用的系统是win10 64位系统,经过多方面搜索,终于确定问题,版本不匹配,dll因为CPU架构不匹配不能注入时,程序会通过SendMessage来调用你的KeyBoardProc,然后程序就卡住了,一直卡在对话框界面,卡死…
直接编译成64位的程序解决问题,同时,注入程序和dll都要是64位.
(参考知乎回答https://www.zhihu.com/question/64221483)