delphi 利用Hook技术实现键盘监控


本文整理自网络,侵删。

 在许多系统中,出于安全或其它原因,常常要求随时对键盘进行监控,一个专业的监控程序必须具备两点,一是实时;二是作为指示图标运行。实际应用中把利用Hook(即钩子)技术编写的应用程序添加到Windows的任务栏的指示区中就能够很好的达到这个目的。我在参考了API帮助文档基础上,根据在Delphi开发环境中 的具体实现分别对这两部分进行详细论述。
一、Hook(钩子)的实现:

---- Hook是应用程序在Microsoft Windows 消息处理过程中设置的用来监控消息流并且处理系统中尚未到达目的窗口的某一类型消息过程的机制。如果Hook过程在应用程序中实现,若应用程序不是当前窗口时,该Hook就不起作用;如果Hook在DLL中实现,程序在运行中动态调用它,它能实时对系统进行监控。根据需要,我们采用的是在DLL中实现Hook的方式。

---- 1.新建一个导出两个函数的DLL文件,在hookproc.pas中定义了钩子具体实现过 程。代码如下:

library keyspy;
uses
windows, messages, hookproc in 'hookproc.pas';
exports setkeyhook, endkeyhook;
begin nexthookproc:=0; procsaveexit:=exitproc; exitproc:=@keyhookexit;
end.

2.在Hookproc.pas中实现了钩子具体过程:
unit hookproc;
interface
uses
Windows, Messages, SysUtils, Controls, StdCtrls;
var nexthookproc:hhook; procsaveexit:pointer;
function keyboardhook(icode:integer;wparam:wparam;
lparam:lparam):lresult;stdcall;export;
function setkeyhook:bool;export;//加载钩子
function endkeyhook:bool;export;//卸载钩子
procedure keyhookexit;far;
const afilename='c:\debug.txt';//将键盘输入动作写入文件中
var debugfile:textfile;
implementation
function keyboardhookhandler(icode:integer;wparam:wparam;
lparam:lparam):lresult;stdcall;export;
begin
if icode<0 then
begin result:=callnexthookex(hnexthookproc,icode,wparam,lparam);
exit;
end; assignfile(debugfile,afilename); append(debugfile);
if getkeystate(vk_return)<0 then
begin writeln(debugfile,''); write(debugfile,char(wparam));
end
else write(debugfile,char(wparam)); closefile(debugfile);
result:=0;
end;
function endkeyhook:bool;export;
begin
if nexthookproc<>0 then begin unhookwindowshookex(nexthookproc); nexthookproc:=0;
messagebeep(0); end; result:=hnexthookproc=0;
end;
procedure keyhookexit;far;
begin
if nexthookproc<>0 then endkeyhook; exitproc:=procsaveexit;
end;
end.

相关阅读 >>

Delphi 的 tstringbuilder 可以完美实现jave ,c#的tstringbuilder功能

Delphi android 拨打电话

Delphi fmx下怎么得到当前程序的路径和文件名称?

Delphi多媒体函数

Delphi 获取系统服务service id

Delphi使用tclientdataset时不携带midas.dll的方法

Delphi android 按包名判断是否安装了app

Delphi 十进制十六进制转换

Delphi 获取文件修改时间

[Delphi] 计算目录大小的函数,获得目录文件列表,计算文件的大小

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...