Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Hook s id Dll s - пожалуйсто объясните. [D6, Win95/98]


Бильврёст ©   (2002-01-29 14:19:00) 

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

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

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

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


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

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


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

Great !!!

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


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

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

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

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

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

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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо