KEYMOUSU.PAS
上传用户:whhglaser
上传日期:2007-01-04
资源大小:163k
文件大小:2k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. unit Keymousu;
  2. interface
  3. uses
  4.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  5.   Forms, Dialogs, StdCtrls, ExtCtrls;
  6. type
  7.   TForm1 = class(TForm)
  8.     Label1: TLabel;
  9.     Label2: TLabel;
  10.     Label3: TLabel;
  11.     Label4: TLabel;
  12.     Label5: TLabel;
  13.     Label6: TLabel;
  14.     Label7: TLabel;
  15.     Label8: TLabel;
  16.     Label9: TLabel;
  17.     Label10: TLabel;
  18.     Label11: TLabel;
  19.     Bevel1: TBevel;
  20.     Label12: TLabel;
  21.     Panel1: TPanel;
  22.     Bevel3: TBevel;
  23.     Label13: TLabel;
  24.     Label14: TLabel;
  25.     Label15: TLabel;
  26.     Label16: TLabel;
  27.     Bevel2: TBevel;
  28.     Bevel4: TBevel;
  29.     Bevel5: TBevel;
  30.     Bevel6: TBevel;
  31.     Bevel7: TBevel;
  32.     procedure FormCreate(Sender: TObject);
  33.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  34.   private
  35.     { Private declarations }
  36.   public
  37.     { Public declarations }
  38.   end;
  39. var
  40.   Form1: TForm1;
  41.   hinst: THANDLE;
  42. implementation
  43. {$R *.DFM}
  44. procedure TForm1.FormCreate(Sender: TObject);
  45. var
  46.    proc:TFARPROC;
  47. begin
  48.     show;
  49.      if getModuleHandle('keydll.dll')<>0 then application.terminate;
  50.          {cannot use close;}
  51.      {only one exe}
  52.      hinst:=LoadLibrary('keydll.dll');
  53.      proc:=getprocAddress(hinst,'sethook');
  54.      asm
  55.      call proc
  56.      end;
  57. end;
  58. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  59. var
  60. proc:TFARPROC;
  61. begin
  62. proc:=getProcAddress(hinst,'unhook');
  63. asm
  64. call proc
  65. end;
  66. while getModuleUsage(hinst)>0 do
  67. freelibrary(hinst);
  68. end;
  69. end.