随笔 - 110  文章 - 28 评论 - 26 

留言簿(1)

随笔分类(103)

随笔档案(110)

文章分类(25)

文章档案(28)

新闻档案(3)

友情连接

  • 小蜜蜂
  • 马氏膏药网
  • 淋巴结肿大,淋巴结核,淋巴结炎 乳腺增生,小叶增生 颈椎病,腰椎病,腰间盘突出 马氏淋巴消炎贴,马氏增生散结贴,马氏关节肌肉贴
  • 黑客基地
  • 全球最大的黑客门户网站

最新随笔

积分与排名

  • 积分 - 143487
  • 排名 - 44

最新评论

阅读排行榜

评论排行榜

譬如我们用鼠标在某个窗口上双击了一次, 或者给某个窗口输入了一个字母 A;
首先发现这些事件的不是窗口, 而是系统!

钩子分两种: 系统级的全局钩子   
                         线程级的钩子.
钩子使用到的函数有三个:
设置钩子: SetWindowsHookEx
释放钩子: UnhookWindowsHookEx
继续钩子: CallNextHookEx

下面是一个例子:(按字母A就会发出'咚,咚'的声音,测试请打开音箱)
在窗体上加上两个button组件
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
//在程序内部定义钩子函数
var
hok:hhook;
function keyb(ncode:integer;wparam:wparam;lparam:lparam):lresult;stdcall;
 begin
 if wparam=65 then beep;//按A发声
 result:=callnexthookex(hok,ncode,wparam,lparam);
 end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 hok:=setwindowshookex(wh_keyboard,@keyb,0,getcurrentthreadid);//安装钩子
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
unhookwindowshookex(hok);//卸载钩子
end;

end.
函数讲解
setwindowshookex(
            idHook: Integer;钩子类型
            lpfn:TFNHookProc;函数指针,加@就可以
            hmod: HINST;包含钩子函数的模块(EXE、DLL)的句柄
            dwThreadId: DWORD ;关联线程,不是过进程
       )
参数四 dwThreadId : 在设置全局钩子时这个参数一般是 0, 表示关联所有线程; 本例是线程级                      的钩子, 所以是GetCurrentThreadId.
    getcurrentthreadid函数是获取当前进程一个唯一的标识符
    GetCurrentThreadId获取当前线程一个唯一的线程标识符

参数三 hmod: 是模块实例的句柄, 在 EXE 和 DLL 中都可以用 HInstance 得到当前实例的句柄; 直接用 API 也可以: GetModuleHandle(nil).
    handle,句柄,说明了变量的性质  而HInstance指的是对象的实例 

参数二   用@或addr()加函数名就可以

参数一  钩子类型, 共有 14 种选择,我了解还少,就不说了,你们可以参考别的资料


posted on 2008-11-12 17:26 小叶子 阅读(957) 评论(0)  编辑 收藏 引用 所属分类: delphi使用钩子函数
只有注册用户登录后才能发表评论。

笔记和文章,可能抄袭,只为学习,请原谅