Главная страница
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.02 c
1-20051
Kostya
2003-06-25 11:27
2003.07.07
как получить число Integer зная его два Byte


11-20026
lamachok
2002-10-29 19:56
2003.07.07
формы


1-20101
avkiev
2003-06-19 18:29
2003.07.07
Проблема с вызовом функции


3-19955
Avreliy
2003-06-11 15:43
2003.07.07
Копирование строки.


14-20257
ЮРИЙ_К
2003-06-19 10:50
2003.07.07
Домашняя сеть на одном компе. Как сделать ???