在DELPHI中HOOK程序的编写


======================================================
注:本文源代码点此下载
======================================================

在delphi中hook程序的编写在编写windows应用程序的时候,有时候我们希望所编写的程序可以捕获用户的某一个特定的动作(比如是否按下鼠标右键)。如果我们的程序处于系统前台,实现这一功能并不复杂。但如果程序在后台运行或者程序不是当前运行的进程的话,这一功能应该如何实现呢?答案就是hook程序。■ 使用delphi实现的hook程序delphi作为一种可视化的开发工具以其程序开发的短周期和编译代码的高效率受到了广大程序人员的喜爱。一般来说,编写hook程序应将hook procedures函数编写为dll ,然后在主程序中调用。因此,编写hook程序需要调用api函数并将其编译为dll(动态连接库),这两点在delphi中实现起来可以说是轻而易举。通过以下的小例子你可以看到在delphi中实现hook程序是多么的简单。首先是dll的源代码(我们假设需要捕捉crtl+n这一击键动作):选择file菜单中的new选项,选择产生一个新的dll模板,存为hktest.dpr library hktest;useshkproc in ′hkproc.pas′;// hook procedures函数在这个文件中定义exportsenablehotkeyhook,disablehotkeyhook;//输出两个函数,保证在其他程序中可以调用这个dllbeginhnexthookproc := 0;//以下这两条保证在dll释放时解除hookprocsaveexit := exitproc;exitproc := @hotkeyhookexit;end.以下是文件hkproc.pas的源码unit hkproc;interfaceuseswindows, messages;varhnexthookproc: hhook;procsaveexit: pointer;function keyboardhookhandler(icode: integer; wparam: wparam; lparam: lpa ram): lresult; stdcall; export;function enablehotkeyhook: bool; export;//使hook生效function disablehotkeyhook: bool; export;//使hook失效procedure hotkeyhookexit; far;//implementationfunction keyboardhookhandler(icode: integer; wparam: wparam; lparam: lpa ram): lresult; stdcall; export;const—keypressmask = $80000000;beginresult := 0;if icode0 then exit; // 连接到wh—keyboard hook链,以捕捉击键动作。同时保留传回值以免hook链中断hnexthookproc := setwindowshookex(wh—keyboard, keyboardhookhandler, hi nstance, 0);result := hnexthookproc0 thenbeginunhookwindowshookex(hnexthookproc); //解除 keyboard hookhnexthookproc := 0;messagebeep(0);messagebeep(0);end;result := hnexthookproc = 0;end;procedure hotkeyhookexit;begin// 如果忘了解除hook,自动代理解除hookif hnexthookproc <> 0 then disablehotkeyhook;exitproc := procsaveexit;end;end.


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值