Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.017 c
7-20325
Mikes
2003-04-23 13:11
2003.07.07
Как узнать BIOS ID


14-20233
BaRToV
2003-06-18 13:24
2003.07.07
KOL + Asm


8-20168
vladislav80
2003-03-21 23:11
2003.07.07
Подскажите, как сделать кнопку другого цвета ?..


1-20034
Andrew_kv
2003-06-24 08:28
2003.07.07
Как передать параметры в форму


1-20055
Alexey
2003-06-23 17:03
2003.07.07
Проблема с OLE-объектами