SetWindowsHookEx函数参数详解

下系统钩子(键盘钩子,鼠标钩子等等)已是我们最长用的手段,要做钩子程序就必须用到下面这几个函数使用动态链接库(dll),即要实现全局系统钩子。这里就这几个函数的参数做一下详细的讲解。

需要使用到WindowsAPI中的两个函数:
一. HHOOK SetWindowsHookEx(
int idHook,         //要安装的钩子类型 (参考下面的IdHook取值)
HOOKPROC lpfn,   //钩子过程的指针 ,也即拦截到指定系统消息后的预处理过程,须定义在DLL中,
HINSTANCE hMod,    //应用程序实例的句柄 如果是全局钩子, hInstance是DLL句柄(DllMain中给的模块地址。就是包含HookProc的动态库加载地址。否则给0就可以了,即勾自己。
DWORD dwThreadId;   //要安装钩子的线程ID ,指定被监视的线程,如果明确指定了某个线程的ID就只监视该线程,此时的钩子即为线程钩子;如果该参数被设置为0,则表示此钩子为监视系统所有线程的全局钩子。);

其中idHook参数可以取如下常量:
WH_CALLWNDPROC     //窗口钩子,当系统向目标窗口发送消息时将触发此钩子
WH_CALLWNDPROCRET     //窗口钩子,当窗口处理完消息后将触发此钩子
WH_CBT   //当Windows激活、产生、释放(关闭)、最小化、最大化或改变窗口时都将触发此事件
WH_DEBUG    //调试钩子
WH_GETMESSAGE    //当往消息队列中增加一个消息时将触发此钩子
WH_JOURNALPLAYBACK     //回放钩子,可以用于播放已记录的鼠标和键盘的操作
WH_JOURNALRECORD     //记录钩子,可以用于记录鼠标和键盘的操作,木马程序可以使用此钩子窃取受控方在屏幕中敲入的密码
WH_KEYBOARD     //当敲击键盘时将触发此钩子
WH_MOUSE    //当有鼠标操作时将触发此钩子
WH_MSGFILTER   //消息过滤钩子
WH_SHELL   //Shell钩子
WH_SYSMSGFILTER    //系统消息过滤钩子

 

使用WH_CBT系统级钩子,当Windows激活、产生、释放(关闭)、最小化、最大化或改变窗口时都将触发此事件,我们在自定义消息函数中只处 理关闭窗口的消息,在自定义的钩子函数若返回0则允许对窗体的操作,返回1则阻止窗口最大化、最小化等操作。另外此钩子必须使用动态链接库(dll)也就 是钩子函数必须写在DLL里。


二. BOOL UnhookWindowsHookEx(
HHOOK hhk   //要注销的钩子句柄
)

配合这两个函数还要配合一些相应的回调函数,一个钩子就做好了。钩子的好处说不完。具体功能就看你发挥了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
`SetWindowsHookEx`是一个Windows API函数,用于安装一个全局的或局部的钩子函数。该函数可以用于截获和处理系统和应用程序的消息和事件,比如键盘、鼠标、消息等。使用钩子函数可以实现一些高级的功能,如键盘记录、鼠标跟踪、窗口监控等。 `SetWindowsHookEx`的函数原型如下: ```c++ HHOOK SetWindowsHookEx( int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId ); ``` 其中,参数含义如下: - `idHook`:指定需要安装的钩子类型,可以使用以下常量中的一个或多个来指定钩子类型: - `WH_KEYBOARD`:键盘钩子。 - `WH_MOUSE`:鼠标钩子。 - `WH_CALLWNDPROC`:消息钩子。 - `WH_CBT`:窗口钩子。 - `WH_GETMESSAGE`:获取消息钩子。 - `WH_JOURNALRECORD`:记录钩子。 - `WH_KEYBOARD_LL`:低级键盘钩子。 - `WH_MOUSE_LL`:低级鼠标钩子。 - `lpfn`:指定钩子函数的地址,该函数的原型为`LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)`,其中`nCode`表示钩子类型,`wParam`和`lParam`表示传递给钩子函数的消息和事件参数。钩子函数必须返回一个值,具体取决于钩子类型。 - `hMod`:指定包含钩子函数的模块的句柄,通常可以设置为NULL。 - `dwThreadId`:指定需要安装钩子的线程ID,如果为0,则表示钩子函数将被安装到系统的所有线程中,为全局钩子。 例如,以下代码安装一个键盘钩子: ```c++ HHOOK hHook = SetWindowsHookEx(WH_KEYBOARD, HookProc, NULL, 0); ``` 需要注意的是,安装钩子函数需要有足够的权限,并且需要谨慎使用,不当的使用可能会对系统和应用程序的稳定性产生不良影响。同时,安装钩子函数后,需要在使用完毕后及时卸载,否则可能会导致钩子函数一直运行,耗费系统资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值