Текущий архив: 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.49 MB
Время: 0.011 c