hook键盘钩子_非dll
unit Unit1; // download by http://www.codefans.net interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, ExtCtrls; type TForm1 = class(TForm) lbl1: TLabel; lbl2: TLabel; edt1: TEdit; edt2: TEdit; btn1: TButton; btn2: TButton; lst1: TListBox; // ListBox1: TListBox; // Button1: TButton; // Button2: TButton; // Edit1: TEdit; // Edit2: TEdit; // Label1: TLabel; // Label2: TLabel; procedure FormCreate(Sender: TObject); procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); procedure edt1Change(Sender: TObject); procedure edt1KeyPress(Sender: TObject; var Key: Char); procedure lst1DblClick(Sender: TObject); private function Keyhookresult(lP: integer; wP: integer): pchar; { Private declarations } public { Public declarations } end; var Form1: TForm1; hookkey: string; hooktimes: word; hHook: integer; implementation {$R *.DFM} function TForm1.Keyhookresult(lP: integer; wP: integer): pchar; begin result := '[Print Screen]'; { VK_0 thru VK_9 are the same as ASCII '0' thru '9' ($30 - $39) } { VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' ($41 - $5A) } case lp of 14354: result := '[Alt]'; //不能识别 10688: result := '`'; 561: Result := '1'; 818: result := '2'; 1075: result := '3'; 1332: result := '4'; 1589: result := '5'; 1846: result := '6'; 2103: result := '7'; 2360: result := '8'; 2617: result := '9'; 2864: result := '0'; 3261: result := '-'; 3515: result := '='; 4177: result := 'Q'; 4439: result := 'W'; 4677: result := 'E'; 4946: result := 'R'; 5204: result := 'T'; 5465: result := 'Y'; 5717: result := 'U'; 5961: result := 'I'; 6223: result := 'O'; 6480: result := 'P'; 6875: result := '['; 7133: result := ']'; 11228: result := '\'; 7745: result := 'A'; 8019: result := 'S'; 8260: result := 'D'; 8518: result := 'F'; 8775: result := 'G'; 9032: result := 'H'; 9290: result := 'J'; 9547: result := 'K'; 9804: result := 'L'; 10170: result := ';'; 10462: result := ''''; 11354: result := 'Z'; 11608: result := 'X'; 11843: result := 'C'; 12118: result := 'V'; 12354: result := 'B'; 12622: result := 'N'; 12877: result := 'M'; 13244: result := ','; 13502: result := '.'; 13759: result := '/'; 13840: result := '[Right-Shift]'; 14624: result := '[Space]'; 283: result := '[Esc]'; 15216: result := '[F1]'; 15473: result := '[F2]'; 15730: result := '[F3]'; 15987: result := '[F4]'; 16244: result := '[F5]'; 16501: result := '[F6]'; 16758: result := '[F7]'; 17015: result := '[F8]'; 17272: result := '[F9]'; 17529: result := '[F10]'; 22394: result := '[F11]'; 22651: result := '[F12]'; 10768: Result := '[Left-Shift]'; 14868: result := '[CapsLock]'; 3592: result := '[Backspace]'; 3849: result := '[Tab]'; 7441: if wp > 30000 then result := '[Right-Ctrl]' else result := '[Left-Ctrl]'; 13679: result := '[Num /]'; 17808: result := '[NumLock]'; 300: result := '[Print Screen]'; 18065: result := '[Scroll Lock]'; 17683: result := '[Pause]'; 21088: result := '[Num0]'; 21358: result := '[Num.]'; 20321: result := '[Num1]'; 20578: result := '[Num2]'; 20835: result := '[Num3]'; 19300: result := '[Num4]'; 19557: result := '[Num5]'; 19814: result := '[Num6]'; 18279: result := '[Num7]'; 18536: result := '[Num8]'; 18793: result := '[Num9]'; 19468: result := '[*5*]'; 14186: result := '[Num *]'; 19053: result := '[Num -]'; 20075: result := '[Num +]'; 21037: result := '[Insert]'; 21294: result := '[Delete]'; 18212: result := '[Home]'; 20259: result := '[End]'; 18721: result := '[PageUp]'; 20770: result := '[PageDown]'; 18470: result := '[UP]'; 20520: result := '[DOWN]'; 19237: result := '[LEFT]'; 19751: result := '[RIGHT]'; 7181: result := '[Enter]'; end; end; //钩子回调过程 function HookProc(iCode: integer; wParam: wParam; lParam: lParam): LResult; stdcall; var s:string; begin result:=0;//zl add if (PEventMsg(lparam)^.message = WM_KEYDOWN) then begin //事件消息,键盘按下 s:=format('Down:%5d %5d ',[PEventMsg(lparam)^.paramL,PEventMsg(lparam)^.paramH]) +Form1.Keyhookresult(peventMsg(lparam)^.paramL, peventmsg(lparam)^.paramH); Form1.lst1.Items.Add(s); end else if (PEventMsg(lparam)^.message = WM_KEYUP) then begin //键盘按键 s:=format(' Up:%5d %5d ',[PEventMsg(lparam)^.paramL,PEventMsg(lparam)^.paramH]) +Form1.Keyhookresult(PEventMsg(lparam)^.paramL,PEventMsg(lparam)^.paramH); Form1.lst1.Items.Add(s); end; end; procedure TForm1.FormCreate(Sender: TObject); begin hooktimes := 0; hHook := 0; end; procedure TForm1.btn1Click(Sender: TObject); begin inc(hooktimes); if hooktimes = 1 then begin hookkey := TimeToStr(now) + ' '; hHook := SetWindowsHookEx(WH_JOURNALRECORD, HookProc, HInstance, 0); MessageBox(0, '键盘监视启动', '信息', MB_ICONINFORMATION + MB_OK); end; end; procedure TForm1.btn2Click(Sender: TObject); begin UnHookWindowsHookEx(hHook); hHook := 0; if hooktimes <> 0 then begin MessageBox(0, '键盘监视关闭', '信息', MB_ICONINFORMATION + MB_OK); end; hooktimes := 0; end; procedure TForm1.edt1Change(Sender: TObject); var i:DWORD; begin if length(edt1.text)<>1 then exit; //映射虚拟键 i:=MapVirtualKey(ord(edt1.text[1]), 0 ); edt2.text:=format('%d %x',[i,i]); end; procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char); begin edt1.text:=''; end; procedure TForm1.lst1DblClick(Sender: TObject); begin lst1.clear; end; end.
书搞进脑袋 创新 创造; 积极