键盘钩子(SetWindowHookEx)

本文介绍了Windows下的钩子机制,特别是SetWindowHookEx函数用于设置全局键盘钩子,阐述了钩子的工作原理,区分了局部钩子和全局钩子,并详细解析了SetWindowHookEx函数的参数及钩子函数的使用。通过设置钩子,可以实现DLL注入,监控键盘事件。同时,提供了键盘钩子的源码链接。
摘要由CSDN通过智能技术生成

挂钩原理
Windows下的应用程序大部分都是基于消息机制的,它们都会有一个消息过程函数,根据不同的消息完成不同的功能。
Windows操作系统提供的钩子机制的作用就是用来截获和监视这些系统中的消息。Windows钩子琳琅满目,可以用来应对各种不同的消息。

按照钩子作用的范围不同,又可以分为局部钩子和全局钩子。局部钩子是针对某个线程的;
而全局钩子则是作用于整个系统中基于消息的应用。全局钩子需要使用DLL文件,在DLL中实现相应的钩子函数。
在操作系统中安装全局钩子后,只要进程接收到可以发出钩子的消息,全局钩子的DLL文件就会被操作系统自动或强行地加载到该进程中。
因此,设置消息钩子,也可以达到DLL注入的目的。

挂钩函数
HHOOK SetWindowsHookEx(      

    int idHook,
    HOOKPROC lpfn,
    HINSTANCE hMod,
    DWORD dwThreadId
);
移除钩子函数
BOOL UnhookWindowsHookEx(      

    HHOOK hhk
);
参数介绍
该函数的返回值是一个钩子句柄。参数介绍如下:

lpfn:指定Hook函数的地址。如果dwThreadId参数被赋值为0,或者被设置为一个其他进程中的线程ID,那么lpfn属于DLL中的函数过程。
如果dwThreadId为当前进程中的一个线程ID,那么lpfn可以使指向当前进程模块中的函数,当然,也可以使DLL模块中的函数。

hMod:该参数指定钩子函数所在模块的模块句柄。即lpfn所在的模块句柄。如果dwThreadId为当前进程中的线程ID,且lpfn所指函数在当前进程中,

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值