贾成刚 2024-02-19 17:24 采纳率: 100%
浏览 4
已结题

HOOK 如何实现对一个线程的钩子函数

尝试在windows本机上对一个已经存在的线程建立钩子,使用HOOK函数SetWindowsHookEx(),但是多次都不成功。如果是全局钩子,就没问题,这是为什么?
#HOOK# #钩子# #线程#

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-02-19 20:16
    关注

    【相关推荐】



    • 这篇博客: 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会调用注册的窗口过程)


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 已采纳回答 2月26日
  • 创建了问题 2月19日

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址