您的位置:首页 > 编程语言 > Delphi

在DELPHI中HOOK程序的编写

2012-01-12 12:27 381 查看
======================================================

注:本文源代码点此下载

======================================================

在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^)/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: