Текущий архив: 2003.07.07;
Скачать: CL | DM;
Вниз
ф-ция setwindowhookex или о вторжении в чужу область памяти Найти похожие ветки
← →
FallenGod (2003-05-05 18:41) [0]Как я могу повешать хук на чужое окно, т.е мне нужно отлавливать нажатия клавишь которые происходят тока в определнном, и чужом окне. На сколько я знаю функция которая будет вызываться при срабатывании хука должна лежать в dll , а можно как либо осуществеить это без dll? т.е есть один exe который вешает хук на другой exe ? Когда пробуешь ложить функцию не в длл а в сам ехе, то получаешь код ошибки 5 - access denied. Я так понял что по простому в чужую область памяти нельзя вторгнуться.
Есть какие либо предложения как можно осуществить вышеприведенную задчау ?
Заранее благодарен.
← →
Cobalt (2003-05-06 11:22) [1]Задача твоя решения не имеет, т.к. в справке сказано однозначно, что функцию надо ложИть в ДЛЛ:
If the dwThreadId parameter is zero or specifies the identifier of a thread created by a different process, the lpfn parameter must point to a hook procedure in a dynamic-link library (DLL).
← →
Nikolai (2003-05-06 17:40) [2]А при чем тут необходимость "вторгаться в адресное пространство чужого процесса". Если нужно отлавливать нажатие клавишь и инициировать какие-либо действия, - для этого не нужно лезть в АП чужого процесса. А если тебе нужны байтики в АП чужого процесса посмотри WMI.
← →
vidiv (2003-05-07 05:21) [3]Есть способ!
Кидаешь функцию (HookProc) обработки в сам exe, помещаешь ее в раздел Exports (ну там еще надо StdCall... и т. п.).
И делаешь в разделе пременных переменную типа функции:
var MyHookProc: function (....):HResult; stdcall;
потом просто делаешь
h:=LoadLibrary(PChar(ParamStr(0)));
if h=0 then ...
@MyHookProc := GetProcAddress(h,"HookProc");
а потом уже делаешь с ней хук...
пусть криво, зато без DLL
← →
Nikolai (2003-05-07 11:58) [4]2 vidiv © (07.05.03 05:21)
и как это все будет работать? Я так понимаю для загружаемого как библиотека модуля код библиотеки периода выполнения запускаться не будет. Что-то мне подсказывает, что начнутся баги :)... найти адреса API функций в АП вызвавшего exe-шника, по-моему, уже будет нетривиальной задачей.
Про VCL вообще молчу.
Или я что-то пропустил?
← →
Code.x (2003-05-07 12:48) [5]а я решил эту проблему простым GetAsyncKeyState, при этом проверяя какое окно сейчас Getforegroundwindow. Вроде все работает
Страницы: 1 вся ветка
Текущий архив: 2003.07.07;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.006 c