|
用DELPHI编制Windows95下的钩子函数 Windows消息管理机构提供了能使应用程序访问控制消息流μ
c4所谓的钩子(HOOK)机制。钩子有多种,分别用于捕获某一特定类型或某一范围的消息。如:键盘消息,鼠标消息等。我们这里仅以键盘钩子的使用为例,讨论在DELPHI下怎样编写DLL程序和怎样在自己的程序中安装使用键盘钩子函数,并讨论了不同程序使用同一DLL文件时怎样共享数据。
一、 钩子过滤函数的编写说明
由于钩子过滤函数必须在独立的模块中,也就是说我们必须首先生成一个DLL框架,然后再在其中加入钩子函数代码以及其他相关函数代码。我们这里以键盘钩子过滤函数的编写为例来说明。具体步骤如下:
1、先生成一个DLL筐2架
2、编写自己的键盘钩子过滤函数
钩子过滤函数必须是回调函数,其函数的 4稳缦拢o
在生成的DLL框架中加入自己的键盘钩子处理函数处理键盘消息。
代码如下:…
3、 安装键盘钩子过滤函数
为安装一个钩子筥fd滤函数应调用SetWindowsHookEx函数(适用于Windows3.0的SetWindowsHook钩子安装函数现在已经废弃不用)。该函数的原形如下:
HHOOK SetWindowsHookEx(
int idHook, // 安装的筥b3子类型
HOOKPROC lpfn, // 钩子过滤籂f数地址
HINSTANCE hMod, // 任务句柄
DWORD dwThreadId // 钩子用于的目的
);
需要说明的是:蚠a8常应该调用MakeProcInstance函数以获取一个输出函数的前导码的入口地址,再将此地址作为SetWindowsHookEx的第二个参数lpfn。但由于Delphi提供了灵巧调用(smart callback),使得MakeProcInstance可以省去,而直接将钩子过滤函数名用作入口地址。
这样当应用程序觃c3GetMessage或PeekMessage函数从消息队列中读消息或有按键消息(WM_KEYDOWN或WM_KEYUP)要处理时,系统就要调用钩子过滤函数KeyHookProc处理键盘消息。
|