Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.25;
Скачать: CL | DM;

Вниз

Without dll :)   Найти похожие ветки 

 
SpyBoy ©   (2005-06-29 22:26) [0]

Некто сказал, что около года назад один умелец выложил на сайт
delphimaster.ru исходник проги(клавиатурного шпиона),  умеющей превосходно обходиться без длл.Не могли бы выложить его ещё раз или отправить мне по @.

P.S. Ну хотя бы автора подскажите.


 
Eraser ©   (2005-06-29 22:39) [1]

SpyBoy ©   (29.06.05 22:26)

Статья не знаю где.
Такую штуку можно сделать только под 2K/XP/2003 испльзуя Low Level Hooks.


 
NikotiN ©   (2005-06-29 23:14) [2]

а из exe нельзя экспортировать функции?


 
kami ©   (2005-06-30 00:01) [3]

Хммм... Сильно не бейте, в английском не силен :), но что-то с переводом первоисточника (MSDN) не ладится:
В ремарках SetWindowsHookEx Function:
WH_KEYBOARD_LL- Global only
-------
All global hook functions must be in libraries

В то же время:
The LowLevelKeyboardProc hook procedure is an application-defined or library-defined callback function used with the SetWindowsHookEx function.

Вроде, последнее предложение переводится как LowLevelKeyboardProc это процедура-перехватчик, определенная в приложении или библиотеке, которая используется совместно с функцией SetWindowsHookEx

Так что я неправильно понимаю или перевожу? Можно или нет "запуздыривать" WH_XXXXX_LL- callback функции в приложение?


 
P.N.P. ©   (2005-06-30 00:03) [4]

>kami ©   (30.06.05 00:01) [3]
>Можно или нет
Можно, уже проверено.


 
Eraser ©   (2005-06-30 00:08) [5]

kami ©   (30.06.05 00:01) [3]

or - это "или". Можно.


 
kami ©   (2005-06-30 00:09) [6]

2 [4] P.N.P. ©
ну, тогда проблема с написанием клавиатурного шпиона без dll - небольшая.


 
P.N.P. ©   (2005-06-30 00:13) [7]

У меня для мышки так сделано:

const
 WH_MOUSE_LL=14; { Low-level mouse hook (work on XP/2000 only) }
 
{------------------------   HOOK  DECLARATION ----------------------------------}
var
 HookedAlready: Boolean = False;

function SetHook: Boolean;
function RemoveHook: Boolean;
function HookProc(Code: integer; wParam: integer;lParam: Longint): Longint; stdcall;
{-------------------------------------------------------------------------------}

implementation

var
 MiseHook: HHook;
{------------------------   HOOK  CODE  ----------------------------------------}
function HookProc(Code: integer; wParam: integer;lParam: Longint): Longint;
begin
 if (wParam = WM_LBUTTONDOWN) then
{ do something }
 result := CallNextHookEx(MiseHook, Code, wParam, lParam);
end;

function SetHook: Boolean;
begin
 Result:=False;
 if HookedAlready then
   exit;
 MiseHook := SetWindowsHookEx(WH_MOUSE_LL, HookProc, HInstance, 0);
 HookedAlready := True;
end;

function RemoveHook: Boolean;
begin
 Result:=False;
 UnHookWindowsHookEx(MiseHook);
 HookedAlready := False;
end;
{-------------------------------------------------------------------------------}


 
kami ©   (2005-06-30 00:15) [8]

2 [5] Eraser ©
Оно, конечно, понятно. Но сбивает фраза из описания  SetWindowsHookEx Function:
WH_KEYBOARD_LL- Global only
-------
All global hook functions must be in libraries


 
Piter ©   (2005-06-30 01:13) [9]

kami ©   (30.06.05 0:15) [8]
All global hook functions must be in libraries


это очевидно, если понимать как работает хук.

Хотя из EXE"щника тоже можно функции экспортировать и использовать EXE как DLL. Правда, придется столкнуться со многими проблемами, в том числе в зависимости от компилятора...


 
Kerk ©   (2005-06-30 01:15) [10]

Надо IMAGE_BASE изменить у ехе, чтоб по адресам он с другими прогами не пересекался..  я так mouse hook без DLL делал в свое время.


 
kami ©   (2005-06-30 01:37) [11]

2 [9] Piter ©
Мда... Тогда я не понимаю, как работает хук(хотя раньше думал, что хотя бы общее представление имею - приходилось использовать), т.к. для меня это неочевидно.
В принципе, это уже пошло буквоедство, ответ был дан в [4] P.N.P. Остальное непринципиально, но все же интересно, почему на одной странице пишут, что для WH_KEYBOARD_LL нужно использовать только dll, а на другой - "где хотите, там и хукайте" ("извращения" над .exe в расчет не беру :) )


 
Piter ©   (2005-06-30 12:37) [12]

Kerk ©   (30.06.05 1:15) [10]
Надо IMAGE_BASE изменить у ехе


Ну это может спасти, но где гарантия, что выберешь абсолютно уникальный адрес? А если не дай бог пойдут релоки - вся твоя программа накроется медным тазом.

Мда... Тогда я не понимаю, как работает хук

ну так почитай

но все же интересно, почему на одной странице пишут, что для WH_KEYBOARD_LL нужно использовать только dll, а на другой - "где хотите, там и хукайте"

ну во-первых, где хотите - о таком не говорится.

Во-вторых, ты понимаешь отличие между локальным и глобальным хуком? Локальный можешь ставить откуда угодно - это тоже очевидно, зная принцип работы хуков. А вот глобальный - ОЧЕНЬ ЖЕЛАТЕЛЬНО (фактически обязательно) ставить из библиотеки, если не извращаться с экспортом функций из EXE"шника

All global hook functions must be in libraries

правильно, здесь говорится о глобальных хуках - они ставятся из библиотек.

The LowLevelKeyboardProc hook procedure is an application-defined or library-defined callback function used with the SetWindowsHookEx function

тоже все верно. Что из приложения, что из библиотек хуки ставятся функцией SetWindowsHookEx. Что не так?

Тут же не написано - "глобальные хуки можно ставить как в приложении, так и в библиотеке с помощью функции  SetWindowsHookEx"


 
Игорь Шевченко ©   (2005-06-30 12:42) [13]

Здесь шпионам не место


 
Некто ©   (2005-06-30 13:04) [14]

2SpyBoy
>>Некто сказал
типун тебе на язык, ничего такого я не говорил :о)


 
WondeRu ©   (2005-06-30 14:19) [15]

можно просто использовать DirectInput... и никаких хуков вам...


 
3DxFantastika ©   (2005-06-30 17:33) [16]

а что такое WH_KEYBOARD_LL ?


 
Digitman ©   (2005-06-30 18:01) [17]


> 3DxFantastika ©   (30.06.05 17:33) [16]


низкоуровневый клав.хук, реализованный в ОС на НТ-платформе

в справке Борланда ты его не найдешь - справка та писалась еще во времена безраздельного царствования Win9x и плавно переползала из версии в версию Делфи

описание ищи в msdn



Страницы: 1 вся ветка

Текущий архив: 2005.07.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.038 c
14-1119960982
REA
2005-06-28 16:16
2005.07.25
Работа на свободе


3-1118390002
Руслан
2005-06-10 11:53
2005.07.25
Вычисляемые поля.


1-1120840895
A013B
2005-07-08 20:41
2005.07.25
Две формы.


3-1118292009
Rat
2005-06-09 08:40
2005.07.25
Добавить колонку в ДБ-грид, если там уже есть результат SQL-запро


8-1111882439
Valera
2005-03-27 04:13
2005.07.25
DSPack не обрабатывает сообщение на включение заставки и питания