Programowanie w języku Delphi » FAQ

Jak założyć globalnego Hooka na klawiaturę

Oto kod ukazujący jak założyc funkcję przechwytująca na klawiaturę. W interface:

 var MainHook : HHOOK;

 function KeyHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall;

A w Implementation:

function KeyHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall;
var
  Buffer: TEventMsg;
begin
  result := 0 ;
  Buffer := PEventMsg(lParam)^;
  if Buffer.message = wm_KeyDown then
    Form1.Memo1.Text := Form1.Memo1.Text + chr(Buffer.paraml);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MainHook := SetWindowsHookEx(wh_JournalRecord, KeyHook, HInstance, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnhookWindowsHookEx(MainHook);
end;

4 komentarze

xan 2007-07-25 22:25

ja powiem tak ten kod w ogóle mi nie dizała;/

Midas 2005-05-13 10:24

Co do polskich i duzych liter to idzie sie tego dowiedziec, ale troche hamska metoda (zazwyczaj duza litere pisze sie poprzez SHIFT + litera, badz CAPS LOCK - wystarczy dodac zczytyweanie klawiszy funkcyjnych i mozna sie zorientowac juz jaki txt byl naprawde wpisany). ja to przerobilem tak :

  if Buffer.message = wm_KeyDown then
     begin
     case Buffer.paramh of
         1 : Form1.Memo1.Text := Form1.Memo1.Text + '[ESCAPE]';
         28 : Form1.Memo1.Text := Form1.Memo1.Text + '[ENTER]';
{tu powstawialem odpowiednie numery kazdeko z klawiszy (za duzo by wypisac calosc, mozna to wygrzebac samemu przy pomocy : Form1.Memo1.Text:=Form1.Memo1.Text + inttostr(Buffer.paramh)}
        else  Form1.Memo1.Text := Form1.Memo1.Text + chr(Buffer.paraml)
        end;
    end;


sorki za kod nie jestem programista 1 klasy, wiec jesli mam dostac zjebke to lagodnie prosze ;p

monkey83 2005-02-06 19:25

a co z polskimi znakami? I wielkimi/małymi literami? No i klawiszami typu ENTER itp? Co zrobić żeby przechwycić dokładnie to samo co jest wpisywane z klawiatury? I to najchętniej pod WinXP :)

zolwi 2004-12-06 21:19

Hyba sie pogubilem...
w form create wyskakuje mi blond kompilacji?(keyhook)?