关于HOOK,如何通过钩子截获指定窗口的所有消息 SetWindowsHookEx demo
来源:互联网 发布:新闻 app 源码 编辑:程序博客网 时间:2024/05/16 04:58
具体使用见demo ,
请注意: 32位只能用win32库, 64位 需要用64位 库。64位可以hook64位程序,32位可以hook32位程序;
SetWindowsHookEx 第三个参数为HINSTANCE,通过FindWindow找到指定窗口句柄后如何
得到该进程的HINSTANCE呢?
这个参数应该是你调用SetWindowsHookEx的DLL的模块实例句柄,它可以经由DllMain入口的第一个参数得到。
HHOOK SetWindowsHookEx( int idHook,
HOOKPROC lpfn,
HINSTANCE hMod,
DWORD dwThreadId
);
参数:
idHook:指示欲被安装的挂钩处理过程之类型,此参数可以是以下值之一:
WH_CALLWNDPROC(4): 安装一个挂钩处理过程,在系统将消息发送至目标窗口处理过程之前,对该消息进行监视,详情参见CallWndProc挂钩处理过程.
WH_CALLWNDPROCRET(12) :安装一个挂钩处理过程,它对已被目标窗口处理过程处理过了的消息进行监视,详情参见 CallWndRetProc 挂钩处理过程.
WH_CBT(5) :安装一个挂钩处理过程,接受对CBT应用程序有用的消息 ,详情参见 CBTProc 挂钩处理过程.
WH_DEBUG(9):安装一个挂钩处理过程以便对其他挂钩处理过程进行调试, 详情参见DebugProc挂钩处理过程.
WH_FOREGROUNDIDLE(11):安装一个挂钩处理过程,该挂钩处理过程当应用程序的前台线程即将进入空闲状态时被调用,它有助于在空闲时间内执行低优先级的任务.
WH_GETMESSAGE(3):安装一个挂钩处理过程对寄送至消息队列的消息进行监视,详情参见 GetMsgProc 挂钩处理过程.
WH_JOURNALPLAYBACK(1):安装一个挂钩处理过程,对此前由WH_JOURNALRECORD 挂钩处理过程纪录的消息进行寄送.详情参见 JournalPlaybackProc挂钩处理过程.
WH_JOURNALRECORD(0):安装一个挂钩处理过程,对寄送至系统消息队列的输入消息进行纪录.详情参见JournalRecordProc挂钩处理过程.
WH_KEYBOARD(2):安装一个挂钩处理过程对击键消息进行监视. 详情参见KeyboardProc挂钩处理过程.
WH_KEYBOARD_LL(13):此挂钩只能在Windows NT中被安装,用来对底层的键盘输入事件进行监视.详情参见LowLevelKeyboardProc挂钩处理过程.
WH_MOUSE(7):安装一个挂钩处理过程,对鼠标消息进行监视.
WH_MOUSE_LL(14):此挂钩只能在Windows NT中被安装,用来对底层的鼠标输入事件进行监视.详情参见LowLevelMouseProc挂钩处理过程.
WH_MSGFILTER(-1):安装一个挂钩处理过程, 以监视由对话框、消息框、菜单条、或滚动条中的输入事件引发的消息.详情参见MessageProc挂钩处理过程.
WH_SHELL(10):安装一个挂钩处理过程以接受对外壳应用程序有用的通知, 详情参见 ShellProc挂钩处理过程.
WH_SYSMSGFILTER(6):安装一个挂钩处理过程,以监视由对话框、消息框、菜单条、或滚动条中的输入事件引发的消息.这个挂钩处理过程对系统中所有应用程序的这类消息都进行监视.详情参见 SysMsgProc挂钩处理过程.
lpfn:指向相应的挂钩处理过程.若参数dwThreadId为0或者指示了一个其他进程创建的线程之标识符,则参数lpfn必须指向一个动态链接中的挂钩处理过程.否则,参数lpfn可以指向一个与当前进程相关的代码中定义的挂钩处理过程.
hMod:指示了一个动态链接的句柄,该动态连接库包含了参数lpfn
dwThreadId:指示了一个线程标识符,挂钩处理过程与线程相关.若此参数值为0,则该挂钩处理过程与所有现存的线程相关.
返回值:若此函数执行成功,则返回值就是该挂钩处理过程的句柄;若此函数执行失败,则返回值为NULL(0).若想获得更多错误信息,请调用GetLasError函数.
备注:若参数hMod为NULL,而参数dwThreadld为0或者指示了一个其他进程创建的线程标识符,则会产生错误.
至于SetWindowsHookEx的第四个参数dwThreadId,才是你需要借由窗口句柄得到的窗口线程ID,你可以通过下面的代码获得:
DWORD dwThreadID = GetWindowThreadProcessId(hwnd, NULL);
选择相应的消息钩子,比如WH_CALLWNDPROC(用来监视窗口过程)、WH_GETMESSAGE(用来监视消息队列的消息)、WH_KEYBOARD(键盘消息)、WH_MOUSE(鼠标消息)等等。
- 关于HOOK,如何通过钩子截获指定窗口的所有消息 SetWindowsHookEx demo
- 关于HOOK,如何通过钩子截获指定窗口的所有消息
- 关于SetWindowsHookEx【HOOK钩子】
- SetWindowsHookEx原理(如何使用钩子,使用钩子hook其他进程的函数)
- 通过窗口句柄截获消息
- SetWindowsHookEx-HOOK 钩子详细介绍
- VB截获Windows消息的钩子
- VB截获Windows消息的钩子
- QQ是如何防止其它程序通过安装键盘钩子截获密码信息的猜想之一
- HOOK专题 (关于WIN的消息截获及提前处理问题的基本解决方案)
- 如何HOOK桌面窗口消息
- 如何HOOK桌面窗口消息
- 如何HOOK桌面窗口消息
- C#使用全局钩子(hook),SetWindowsHookEx返回0、不回调的解决
- C#使用全局钩子(hook),SetWindowsHookEx返回0、不回调的解决
- C#使用全局钩子(hook),SetWindowsHookEx返回0、不回调的解决
- 注入(4)--消息钩子注入(SetWindowsHookEX)
- VC++ Hook截取鼠标点击窗口消息的问题!全局钩子
- 深度学习常见面试题(更新中)
- HDU5813-Elegant Construction
- 终止线程的方法
- PHP基础巩固
- Python正则表达式-总结
- 关于HOOK,如何通过钩子截获指定窗口的所有消息 SetWindowsHookEx demo
- 两个栈实现一个队列的思路
- Mac卸载atom后右键打开方式残余解决办法
- leetcode 76. Minimum Window Substring 双指针 + Map + 移动窗口
- PHP基础知识 part1
- 数据库简单代码
- 用Maven插件生成Mybatis代码
- 最全Pycharm教程(2)——代码风格
- Android 6.0新特性以及动态获取权限