下载后可任意编辑用 DELPHI 编制钩子函数Windows 消息管理机构提供了能使应用程序访问控制消息流 μ'c4 所谓的钩子(HOOK)机制。钩子有多种,分别用于捕获某一特定类型或某一范围的消息 。如:键盘消息,鼠标消息等。我们这里仅以键盘钩子的使用为例,讨论在 DELPHI 下怎样编写 DLL 程序和怎样在自己的程序中安装使用键盘钩子函数,并讨论了不同程序使用同一DLL 文件时怎样共享数据。一、 钩子过滤函数的编写说明由于钩子过滤函数必须在独立的模块中,也就是说我们必须首先生成一个 DLL 框架,然后再在其中加入钩子函数代码以及其他相关函数代码。我们这里以键盘钩子过滤函数的编写为例来说明。具体步骤如下:1、先生成一个 DLL 框架2、编写自己的键盘钩子过滤函数钩子过滤函数必须是回调函数,其函数的声明为:function KeyHookProc(iCode:Integer;wParam:WPARAM;lParam:LPARAM ) : LRESULT; stdcall ;export ;在生成的 DLL 框架中加入自己的键盘钩子处理函数处理键盘消息。代码如下:…if(iCode>=0) then beginResult:=0; //初始化返回值// 在这里加入自己的代码end elsebegin下载后可任意编辑Result:=CallNextHook(hOldKeyHookiCodewParamlParam);// hOldKeyHook 是保存的原键盘过滤函数end;3、 安装键盘钩子过滤函数为安装一个钩子键盘过滤函数应调用 SetWindowsHookEx 函数(适用于 Windows3.0 的SetWindowsHook 钩子安装函数现在已经废弃不用)。该函数的原形如下:HHOOK SetWindowsHookEx(int idHook// 安装的钩子类型HOOKPROC lpfn// 钩子过滤函数地址HINSTANCE hMod// 任务句柄DWORD dwThreadId // 钩子用于的目的);需要说明的是:通常应该调用 MakeProcInstance 函数以猎取一个输出函数的前导码的入口地址,再将此地址作为 SetWindowsHookEx 的第二个参数 lpfn。但由于 Delphi 提供了"灵巧调用(smart callback)",使得 MakeProcInstance 可以省去,而直接将钩子过滤函数名用作入口地址。这样当应用程序用 GetMessage 或 PeekMessage 函数从消息队列中读消息或有按键消息(WM_KEYDOWN 或 WM_KEYUP)要处理时,系统就要调用钩子过滤函数 KeyHookProc 处理键盘消息。下载后可任意编辑4、 卸载钩子过滤函数。当钩子函数不再需要时,应调用 UnHookWindowsHookProc 卸载安装的钩子以释放系统资源。完整的程序清单如下Library KEYHOOK;uses Windows;const BUFFER_SIZE=16...