3.Hook Hook Hook Hook Hook Hook..
我们想想做鼠标钩子时的做法:用SetWindowsHookEx挂上鼠标钩子,当其他的进程发出鼠标消息时,我们的程序就会拦截到并作出响应。我们还可以用UnhookWindowsHookEx 解除鼠标钩子。我们也必须为我们的函数挂上钩子。不过,鼠标有各种消息响应其他进程,我们的进程有什么消息呢?如果没有消息又怎样响应其他进程呢?即使我们自定义了消息,其他的进程又怎样“懂得”我们的消息呢?真像走入了绝境。
不用怕, 至少我们有两种方法。一是完全模仿SetWindowsHookEx,编制自己的MySetWindowsHookEx,我看过大多数的API Hook 程序里都用了这个方法。其实,我们不必舍近而求远, 我们完全可以继续使用SetWindowsHookEx,因为系统还为我们提供了一个函数:GetMsgProc。在Delphi 中输入GetMsgProc,然后光标停在上面,按F1 键。怎么样,Delphi 帮助里讲得够清楚的吧?好了,我们的消息也有了。
想一想吧:我们在动态链接库中挂上WH_GETMESSAGE消息钩子,当其他的进程发出WH_GETMESSAGE 消息时,就会加载我们的动态链接库,如果在我们的DLL 加载时自动运行API_Hook,不就可以让其他的进程挂上我们的API Hook吗?
4.第二个程序
说干就干。新建一个动态链接库library TryDLL,把原来的Unit APIHook 和 Unit MESS 加进来。library TryDLL 的代码如下:
uses
Windows,
SysUtils,
Classes,
APIHook in 'APIHook.pas',
mess in 'mess.pas';
{$R *.RES}
function GetMsgProc(code: integer; removal: integer; msg: Pointer): Integer; stdcall;
begin
Result := 0;
end;
Var HookHandle: THandle;
procedure StartHook; stdcall;
begin
HookHandle := SetWindowsHookEx(WH_GETMESSAGE, @GetMsgProc, HInstance,
0);
end;
procedure StopHook; stdcall;
begin
UnhookWindowsHookEx( HookHandle );
end;
exports StartHook, StopHook;
begin
API_Hookup; //加载时挂上
end.
欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛
https://bbs.txwb.com
关注天下网吧微信/下载天下网吧APP/天下网吧小程序,一起来超精彩
|
本文来源:论坛收集 作者:未知