首页 服务器 编程 必备知识 搜索引擎 圩日手册
站内搜索
最近浏览
推荐文章
热文排行

API之SetWindowsHookEx安装钩子(HOOK)函数介绍


SetWindowsHookEx函数原型:
HHOOK SetWindowsHookEx(
  int idHook,                    // hook type (钩子类型,处理的消息类型)
  HOOKPROC lpfn,         // hook procedure(钩子子程的地址指针)
  HINSTANCE hMod,      // handle to application instance(应用程序实例的句柄)
  DWORD dwThreadId   // thread identifier(与安装的钩子子程相关联的线程的标识符
)
);
SetWindowsHookEx函数的作用:
安装钩子,具体的说就是把一个应用程序定义的钩子子程安装到钩子链表中。
SetWindowsHookEx函数返回值:
函数执行成功返回钩子子程的句柄,失败返回NULL。
SetWindowsHookEx函数参数介绍
参数1:idHook hook类型。类型为int,整数型。
说明
WH_CALLWNDPROC 用于监视SendMessage发送的消息。系统在向窗体过程发送消息前调用。
WH_CALLWNDPROCRET 用于监视SendMessage发送的消息。系统在窗体过程处理完此消息后调用。另外钩子会向其Hook过程传送一个CwpretStruct结构的地址。此结构包含了窗体过程处理系统消息后的一些消息。
WH_CBT 可在系统激活、创建、消毁、最小化、最大化、移动、改变窗体前调用;在完成一条系统命令前调用;在从系统消息队列中移去鼠标或键盘事件前调用;在设置输入焦点前,或同步系统消息队列前调用。可以在Hook 过程拦截该类Hook,并返回一个值,告诉系统,是否继续执行上面的操作。
WH_DEBUG 系统在调用与某种钩子类型联系的钩子过程前,将调用WH_DEBUG ,应用程序可以使用该钩子决定是否让系统执行某种类型的钩子
WH_FOREGROUNDIDLE 系统在空闲时调用该Hook,在后台执行优先权较低的应用程序。
WH_GETMESSAGE 安装一个监控信息并发送给一个消息队列的钩子
WH_JOURNALPLAYBACK 安装一个可以向系统消息队列中插入消息的钩子。该钩子可以回放以前由 WH_JOURNALRECORD Hook录制的鼠标、键盘输入事件。在WH_JOURNALPLAYBACK Hook安装到系统时,鼠标、键盘输入事件将被屏蔽。该Hook同样是一个全局Hook,不能在指定线程中使用。
WH_JOURNALRECORD 使应用程序可以监视输入事件。典型地,应用程序使用该Hook记录鼠标、键盘输入事件以供以后回放。该Hook是全局Hook,并且不能在指定线程中使用。Hook返回一个时间暂停值,它告诉系统,在处理当前回放的消息时,系统等待百分之几秒。这使得此Hook可以控制在回放时的时间事件。
WH_KEYBOARD 安装一个监控键盘输入事件的钩子。应用程序使用该Hook监视发送到消息队列中的键盘输入。
WH_KEYBOARD_LL Windows NT / 2000 / XP下安装一个监控低层键盘输入事件的钩子
WH_MOUSE 安装一个监控鼠标消息钩子
WH_MOUSE_LL Windows NT / 2000 / XP下安装一个监控低级鼠标输入事件的钩子
WH_MSGFILTER 安装一个监视菜单、滚动条、消息框、对话框,当用户使用ALT+TAB或ALT+ESC来切换窗体时,该HOOK也可以拦截到消息。WH_MSGFILTER仅在应用程序内部监视菜单、滚动条、消息框、对话框等。
WH_SHELL 一个SHELL程序可以使用WH_SHELL Hook来接收重要的信息。当一个SHELL程序被激活前或当前窗体被创建、消毁时,系统会调用WH_SHELL Hook过程。
WH_SYSMSGFILTER 监视菜单、滚动条、消息框、对话框,当用户使用ALT+TAB或ALT+ESC来切换窗体时,该HOOK也可以拦截到消息。WH_SYSMSGFILTER可以在系统内监视所有应用程序的这些事件。
参数2:lpfn 钩子子程的地址指针类型为HOOKPROC,整数型。
如果dwThreadId参数为0,如果是一个由别的进程创建的线程的标识, lpfn必须指向DLL中的钩子子程。 除此以外,lpfn可以指向当前进程的一段钩子子程代码。钩子函数的入口地址,当钩子钩到任何消息后便调用这个函数。
参数3:hMod 应用程序实例的句柄。类型为HINSTANCE,整数型。
标识包含lpfn所指的子程的DLL。如果dwThreadId 标识当前进程创建的一个线程,而且子程代码位于当前进程,hMod必须为NULL。 可以很简单的设定其为本应用程序的实例句柄。
参数4:dwThreadId 与安装的钩子子程相关联的线程的标识符。类型为DWORD,整数型。
如果为0,钩子子程与所有的线程关联,即为全局钩子
VB中的声明:
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long


Hook类型常数:
Public Const WH_CALLWNDPROC = 4
Public Const WH_CALLWNDPROCRET = 12
Public Const WH_CBT = 5
Public Const WH_DEBUG = 9
Public Const WH_FOREGROUNDIDLE = 11
Public Const WH_GETMESSAGE = 3
Public Const WH_HARDWARE = 8
Public Const WH_JOURNALPLAYBACK = 1
Public Const WH_JOURNALRECORD = 0
Public Const WH_KEYBOARD = 2
Public Const WH_KEYBOARD_LL = 13
Public Const WH_MOUSE = 7
Public Const WH_MOUSE_LL = 14
Public Const WH_MSGFILTER = (-1)
Public Const WH_SHELL = 10
Public Const WH_SYSMSGFILTER = 6

[wangjy17908]
添加时间:2011-01-12
版权所有(C)2005-2015