在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^)/
注:本文源代码点此下载
======================================================
在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^)/
相关文章推荐
- 在DELPHI中HOOK程序的编写
- DELPHI 编写服务程序的几点总结。
- DELPHI编写服务程序总结二--编写技巧
- Delphi编写数据库程序要点(二)
- Delphi编写网络程序的安全措施
- 用Delphi编写CGI程序(一)
- 用Delphi编写点对点传文件程序
- Delphi编写数据库程序要点
- Delphi编写Windows系统服务程序【转帖】
- delphi编写的程序如何在win7下提升权限
- Delphi编写系统服务四:如何限制系统服务和桌面程序只运行一个
- 利用Delphi编写Socket通信程序
- Delphi编写的程序在VISTA下提升权限
- 使用delphi编写按键自动点击的小程序
- 用Delphi编写点对点传文件程序
- Delphi编写系统服务五:在系统服务和桌面程序之间共享内存
- 用Delphi编写局域网中的UDP聊天程序 (收藏)
- 怎样用delphi编写一个在线发送邮件的程序
- 用Delphi编写CGI程序返回图象
- 利用Delphi编写Socket通信程序