Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Вниз

Hook s id Dll s - пожалуйсто объясните. 


Бильврёст   (2002-01-29 14:19) [0]

Здравствуйте, мастера. Возникла проблема, решение которой мною найденно небыло ни в одном из доступных мне источников.
Дело в установке нескольких hook-ов из dll.
Имеем след. ситуацию:
Моя прога грузит в своё АП DLL которая устанавливает глобальный hook: при этом сам hook это:
- объект Windows, располагающийся где ?
- если мой процесс окончит работу, hook будет снят ?

Когда мой hook срабатывает:
- моя dll польностью отображается на АП процесса (или потока) в котором произошло отследуемое событие ?
- callback ф-ия, указатель на которую передаётся при вызове SetWindowsHookEx() выполняется в контексте моего процесса или процесса в котором произошло событие, отслеживаемое моим hook-ом ?

При установке новой ловушки она ставится в конец цепочки уже существующих:
- цепочка ловушек в системе только одна или несколько, взависимости от типа hook-а ?
- когда я передаю сообщение дальше по цепочке CallNextHookEx() первым параметром я передаю дескриптор следующего hook-а ??? А как я его узнаю если не я его устанавливал, а к примеру другое приложение ?

Всем большое спасибо за ответы !



Бильврёст   (2002-01-29 14:29) [1]

Господа, прошу прощение за назойливость - но у меня очень ограниченно время в INet-е, а ответ на мой вопросс - очень мне необходим.



Raptor   (2002-01-29 22:25) [2]

при этом сам hook это:
- объект Windows, располагающийся где ?

В АП всех процессов, которые вызвали функцию обработки хука. Когда ставишь, например, хук на клавиатуру ДЛЛ подгружается в АП твоего процесса. Когда ты переключаешься на другое приложение и нажимаешь кнопку на клаве, ДЛЛ сразу же подгруж в АП этого процесса и будет оставаться там пока не будет снят хук.

- если мой процесс окончит работу, hook будет снят ?
Непременно. Причем даже если закончит работу не сам процесс, а та нить, которая поставила хук.

Когда мой hook срабатывает:
- моя dll польностью отображается на АП процесса (или потока) в котором произошло отследуемое событие ?

Да.

- callback ф-ия, указатель на которую передаётся при вызове SetWindowsHookEx() выполняется в контексте моего процесса или процесса в котором произошло событие, отслеживаемое моим hook-ом ?
В контексте того процесса в котором произошло событие, отслеживаемое hook-ом.

При установке новой ловушки она ставится в конец цепочки уже существующих:
- цепочка ловушек в системе только одна или несколько взависимости от типа hook-а ?

Для каждого типа хука отдельная цепочка.

- когда я передаю сообщение дальше по цепочке CallNextHookEx() первым параметром я передаю дескриптор следующего hook-а ??? А как я его узнаю если не я его устанавливал, а к примеру другое приложение ?
CallNextHookEx вызывается в callback-функции обработки хука для того что бы передать сообщение далее по цепочке хуков. Когда ты ставишь хук, ты вызываешь функцию SetWindowsHookEx, результатом которой и будет дискриптор, который ты подставляешь первым параметром в функцию CallNextHookEx. Об этом вроде очень даже прозрачно написано в хелпе.



Бильврёст   (2002-02-05 13:38) [3]

Great !!!

>> Raptor:
Громадный thanks, а то я уж отчаялся где либо найти ответы на всё это.
Если не сложно - не могли бы порекомендовать источники в Internete или авторов книг (можно англоязычные) где можно почитать о DLL. Меня интересует не сам механизм написания, а тонкости, ньюансы и теории вообще.
(Тейксейру не предлагать - там ничего нового для меня нет - смотрел уже :)
Буду признателен.



Raptor   (2002-02-05 23:30) [4]

Ничего конкретного предложить не могу, так как зачастую не запоминаю и не записываю где я наткнулся на ту или иную статью. Я просто беру какой нибудь поисковик и ищу по нужной мне теме.
А вообще, я никаких особых тонкостей и нюансов в написании ДЛЛ не вижу. Там все довольно прозрачно.




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.017 c
1-22736           snoup                 2002-03-26 13:43  2002.04.08  
Почему пишу PlaySound( c: .... *.wav ,0,SND_FILENAME); а оно выдаёт ошибку и не хотит работать


1-22655           DikobraZ              2002-03-26 12:00  2002.04.08  
User32.dll:SetLayeredWindowAttributes.


1-22672           LazyCat               2002-03-28 15:52  2002.04.08  
Как сделать форму без caption barа


14-22792          BorisMor              2002-02-26 10:11  2002.04.08  
Какой инсталятор лучше всего жмет ?


3-22591           Velocity              2002-03-16 15:58  2002.04.08  
Как создать таблицу без использования BDE?