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出现 no mapping for the unicode character exists in the target multi-byte code page 处理方法

Delphi fmx关闭安卓程序

Delphi 读取流 image1 stream 加载到image2 timage 对象

Delphi twebbrowser get html source after ajax load

Delphi调用javascript解析json

Delphi 对gzip解压

Delphi firemonkey处理图形的方式与vcl处理图形的方式大不相同

Delphi datasettojson

Delphi xe开发 android 开机自动启动

Delphi firedac 下的 sqlite [5] - 数据的插入、更新、删除

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



打赏

取消

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

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

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

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

评论

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