上面那个程序源码再简单不过,delphi7的。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure meclose(Sender: TObject; var Action: TCloseAction); procedure memokeypress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; hook:integer; keyoff:boolean; function hookkeyproc(ncode:integer;wparam:wparam;lparam:lparam):lresult;stdcall; //键盘钩子回调函数 implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin memo1.Text := ''; hook := 0; keyoff := false; hook := setwindowshookex(13,@hookkeyproc,hInstance,0); //程序启动时安装钩子 end; function hookkeyproc(ncode:integer;wparam:wparam;lparam:lparam):lresult;stdcall; //回调函数实现 var nkey:array[0..5] of integer; begin if ncode = 0 then begin copymemory(@nkey,pointer(lparam),sizeof(nkey)); if (nkey[2] <> 16) and (nkey[2] <> 144) then //判断标志位 begin keyoff := true; end ; end ; result := callnexthookex(0,ncode,wparam,lparam); end ; procedure TForm1.meclose(Sender: TObject; var Action: TCloseAction); begin unhookwindowshookex(hook); //程序关闭时卸载钩子 end; procedure TForm1.memokeypress(Sender: TObject; var Key: Char); begin if not keyoff then begin form1.Label1.Caption := '你使用了第三方程序模拟按键'; end; keyoff := false; end; end.