Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Keylogger как получать сигнал клавиатуры
Закрытая тема
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
imported_Fireman imported_Fireman вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.06.2003
По умолчанию Keylogger как получать сигнал клавиатуры - 21.08.2003, 03:49

Скажите, а как получать сигналы с клавы, если прога запущена, но, допустим, висит в трее? Ну то есть как в кейлоггерах, наверно...
  (#2 (permalink)) Старый
Srpj Srpj вне форума
Member
 
Сообщений: 100
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.08.2003
По умолчанию 24.08.2003, 10:22

Можно предложить такие способы (примеры будут для C++Builder):

1) Регистрация "горячих клавиш".

Размещаем на форме компонент THotKey и одну кнопку. Объявите также глобальную переменную BOOL RegNew.
В обработчике нажатия кнопки:

Код:
UINT Flags=0;
// извлекаем клавиши-модификаторы из компонента
if( HIBYTE(HotKey1->HotKey) & 128 ) Flags |= MOD_CONTROL;
if( HIBYTE(HotKey1->HotKey) & 64 ) Flags |= MOD_ALT;
if( HIBYTE(HotKey1->HotKey) & 32 ) Flags |= MOD_SHIFT;

RegNew = RegisterHotKey(Handle, 0, Flags, LOBYTE(HotKey1->HotKey));
// Второй параметр - ID комбинации HotKeys на уровне нашей программы.
// Каждая зарегистрированная нами комбинация клавиш должна иметь уникальный ID.
// Для приложения ID может быть в диапазоне 0x0000-0xBFFF, для DLL - от 0xC000 до 0xFFFF

if(!RegNew)
  MessageDlg("nНе удалось зарегистрировать данную комбинацию.", mtError, TMsgDlgButtons()<<mbOK, 0);
В OnDestroy формы:
Код:
if(RegNew) UnregisterHotKey(Handle, 0);
В заголовочном файле:
Код:
void __fastcall HotKeyProc(TMessage &Msg);
BEGIN_MESSAGE_MAP
// получим это сообщение при нажатии комбинации клавиш
MESSAGE_HANDLER(WM_HOTKEY,TMessage,HotKeyProc)
END_MESSAGE_MAP(TForm)
Реализация процедуры HotKeyProc в cpp-файле:
Код:
void __fastcall TForm1::HotKeyProc(TMessage &Msg)
{
// если комбинаций HotKeys было зарегистрировано несколько,
// обрабатывайте содержимое wParam - он содержит ID HotKeys-комбинации
SetForegroundWindow(Handle);
ShowMessage("Our HotKey combination (ID==0) pressed");
}


2) Установка глобальной hook-процедуры (что и делают кейлоггеры)

Проект будет состоять из DLL и, собственно, приложения; при создании DLL можно отключить VCL.
В DLL создаём единственную процедуру:

Код:
extern "C" LRESULT CALLBACK __export KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode==HC_ACTION)
  if( !((lParam>>31)&1) ) // если клавиша в нажатом состоянии
    {
    if( WORD(GetKeyState(VK_CONTROL)) & 0x8000 )
      if( WORD(GetKeyState(VK_MENU)) & 0x8000 )
        if( wParam==VK_F5 )
          MessageBox(NULL, "Ctrl+Alt+F5 pressed", "Information", MB_OK | MB_ICONINFORMATION | MB_TOPMOST | MB_SYSTEMMODAL);
    }
return CallNextHookEx(NULL, 0, wParam, lParam);
}
Осталось создать приложение, которое загрузит DLL и установит Hook.
Код:
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
// Данные импортируемой процедуры из DLL
typedef LRESULT (CALLBACK *fnType)(int,WPARAM,LPARAM);
fnType hookproc;
// Дескриптор будущего Hook'а
HHOOK hKeybHook = NULL;
// HInstance динамической библиотеки
HMODULE hDLL = NULL;
//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
hDLL=LoadLibrary("Project1.dll");
if(hDLL)
  {
  hookproc=(fnType)GetProcAddress(hDLL,"KeyboardProc");
  hKeybHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)(hookproc),hDLL,0);
  if(hKeybHook == NULL)
    ShowMessage("Can't set the WH_KEYBOARD hook:n"+SysErrorMessage(GetLastError()));
  }
else {ShowMessage("Can't load Project1.dll");exit(1);}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
if(hKeybHook)
  {
  UnhookWindowsHookEx(hKeybHook);
  hKeybHook = NULL;
  }
if(hDLL)FreeLibrary(hDLL);
}
  (#3 (permalink)) Старый
imported_Fireman imported_Fireman вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.06.2003
По умолчанию 27.08.2003, 04:04

Thanks!
Ads
Закрытая тема

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо получать данные при помощи DDE Max.Z C++ Builder 1 22.05.2011 20:45
keylogger ferrero Любые вопросы от новичков 3 15.09.2010 23:12
Keylogger как его написать Vasya_Pupkin Assembler 0 03.02.2008 16:25
Синус как получать сигналы question Алгоритмы 3 09.08.2007 09:01
Как получать случайные числа Dmt C++ Builder 25 24.02.2007 13:26
Работа с DateTime как получать данные pinpon Delphi 6 19.09.2006 12:03
Как получать информацию из файлов Excel? MaxVB Visual Basic 15 10.05.2006 15:22
Как получать указатель на на хука при помощи функции Dancv C++ Builder 3 29.12.2005 11:19
Access как при клике на объект получать фокус imported_Алексей_М Другие СУБД 2 29.08.2005 17:00
Как получать информацию с USB устройства в программу Anonymous C++ Builder 4 07.01.2004 17:10
HTTP-Proxy как получать страницы Tishaishii Perl 12 23.09.2003 18:20
Как получать данные с вебсайта Anonymous C++ Builder 1 04.07.2003 13:08



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов