Главная страница
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.015 c
14-20297
Всеволод Соловьёв
2003-06-20 17:02
2003.07.07
Дети пишут богу :)


3-20002
Cranium
2003-06-13 14:42
2003.07.07
Можно ли получить список таблиц открытых пользователем ...


1-20128
Артем К
2003-06-25 02:31
2003.07.07
Как разделить строку на слова?


1-20115
mao
2003-06-24 16:40
2003.07.07
RichEdit не видит картинки??? :(


1-20129
Dan
2003-06-25 06:21
2003.07.07
вложенные циклы