钩子概述:
钩子是Windows中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的例程来监视系统里的消息传递以及在这些消息到达目标窗口应用程序之间处理它们。
钩子的分类:
钩子可以分为线程钩子和全局钩子,线程专用钩子只是监视指定的线程,要监视系统中的所有线程必须使用全局钩子。对于全局钩子,钩子函数必须要包含在独立的动态链接库文件(DLL)中。本文的例子程序就是这样的监控全局键盘输入的全局钩子。
函数实现:
首先我们要编写一个DLL文件,在这个DLL文件中使用SetWindowsHookEx来装载钩子,该函数的原型我们可以通过MSDN得到:
Function SetWindowsHookEx(idHook:Integer; lpin:TFNHookProc; hmod:HINST; dwThreadld:DWORD):HHOOK;stdcall;
参数说明:
idHook: 钩子的类型,本例是一个键盘钩子,使用的是WH_KEYBOARD
lpfn 装载的钩子处理函数
hmod 程序实例句柄
dwThreadld 线程ID
安装成功后返回钩子过程的句柄
最后使用UnhookWindowsHookEx卸载已经安装的钩子,该函数的原型如下:
function UnhookWindowsHookEx(hhk:HHOOK):BOOL;stdcall;
参数说明:
Hhk 卸载钩子的句柄
钩子的处理过程被声明为:
TFNHookProc
钩子是Windows中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的例程来监视系统里的消息传递以及在这些消息到达目标窗口应用程序之间处理它们。
钩子的分类:
钩子可以分为线程钩子和全局钩子,线程专用钩子只是监视指定的线程,要监视系统中的所有线程必须使用全局钩子。对于全局钩子,钩子函数必须要包含在独立的动态链接库文件(DLL)中。本文的例子程序就是这样的监控全局键盘输入的全局钩子。
函数实现:
首先我们要编写一个DLL文件,在这个DLL文件中使用SetWindowsHookEx来装载钩子,该函数的原型我们可以通过MSDN得到:
Function SetWindowsHookEx(idHook:Integer; lpin:TFNHookProc; hmod:HINST; dwThreadld:DWORD):HHOOK;stdcall;
参数说明:
idHook: 钩子的类型,本例是一个键盘钩子,使用的是WH_KEYBOARD
lpfn 装载的钩子处理函数
hmod 程序实例句柄
dwThreadld 线程ID
安装成功后返回钩子过程的句柄
最后使用UnhookWindowsHookEx卸载已经安装的钩子,该函数的原型如下:
function UnhookWindowsHookEx(hhk:HHOOK):BOOL;stdcall;
参数说明:
Hhk 卸载钩子的句柄
钩子的处理过程被声明为:
TFNHookProc