尝试在windows本机上对一个已经存在的线程建立钩子,使用HOOK函数SetWindowsHookEx(),但是多次都不成功。如果是全局钩子,就没问题,这是为什么?
#HOOK# #钩子# #线程#
HOOK 如何实现对一个线程的钩子函数
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 【相关推荐】
- 这篇博客: Windows消息钩取中的 三:SetWindowsHookEx() 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
在Windows编程中,使用SetWindowsHookEx() API可以简便地实现消息钩子,其用于将指定的钩子注册到钩链中,无论在DLL内部或外部都可调用。
函数原型:
HHOOK SetWindowsHookEx(
int idHook, //hook type
HOOKPROC lpfn, //hook procedure
HINSTANCE hMod, //hook procedure所属的DLL句柄
DWORD dwThreadId //将要挂钩的目标线程ID
);
HHOOK:返回值,钩子句柄,需要保留,等不使用钩子时通过UnhookWindowsHookEx函数卸载钩子。
idHook:钩子的拦截消息类型,选择钩子程序的拦截范围,具体值参考文章结尾的消息类型。
Lpfn:消息的回调函数地址,一般是填函数名。
hMod:钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。在dll中可通过AfxInitExtensionModule(MousehookDLL, hInstance)获得DLL句柄。
dwThreadId:钩子所监视的线程的线程号,可通过GetCurrentThreadId()获得线程号。对于全局钩子,该参数为NULL(或0)。
钩子过程(hook procedure)是由OS调用的回调函数。安装消息钩子时,钩子过程需要存在于某个DLL内部,并且该DLL的实例句柄即是hMod。
使用SetWindowsHookEx()设置好钩子后,在某个进程中生成指定消息时,OS会将相关的DLL文件强制注入相应的进程,然后调用注册的钩子过程。
回调函数:简言之,就是某个特定的事件发生时被指定调用的函数。窗口Windows过程(WndProc)就是一个典型的回调函数(键盘,鼠标等事件发生时OS会调用注册的窗口过程)
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- 这篇博客: Windows消息钩取中的 三:SetWindowsHookEx() 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
悬赏问题
- ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
- ¥15 孟德尔随机化怎样画共定位分析图
- ¥18 模拟电路问题解答有偿速度
- ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
- ¥15 误删注册表文件致win10无法开启
- ¥15 请问在阿里云服务器中怎么利用数据库制作网站
- ¥60 ESP32怎么烧录自启动程序
- ¥50 html2canvas超出滚动条不显示
- ¥15 java业务性能问题求解(sql,业务设计相关)
- ¥15 52810 尾椎c三个a 写蓝牙地址