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

Материал из DRKB

Глобальный хук на клавиатуру[править | править код]

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, wParam, 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 not FileExists('d:\log.txt') 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.


Source: http://delphiworld.narod.ru/
ID: 02225