zoukankan      html  css  js  c++  java
  • 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.
    书搞进脑袋 创新 创造; 积极
  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    chrome标签记录——关于各类性能优化
    JavaScript(二)——在 V8 引擎中书写最优代码
    JavaScript学习(一)——引擎,运行时,调用堆栈
    MySQL数据库操作生成UUID
    使用Spring MVC实现文件上传与下载
    敏捷过程(小规模团队敏捷开发)
    后台获取日期值,前台Js对日期进行操作
    搭建Spring相关框架后,配置信息文件头部出现红色小×错误。
  • 原文地址:https://www.cnblogs.com/tobetterlife/p/12170444.html
Copyright © 2011-2022 走看看