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   //要注销的钩子句柄
)

配合这两个函数还要配合一些相应的回调函数,一个钩子就做好了。钩子的好处说不完。具体功能就看你发挥了。(编程世界http://www.ibiancheng.cn/原创)

posted @ 2009-08-21 10:18  苔苔以苔苔以苔  阅读(2707)  评论(1编辑  收藏  举报
猪先飞