Здравствуйте!
Вот такая вот проблема... Предположим, мне нужно отлавливать сообщения в системе и уведомлять о них свою программу. Как установить hook и правильно написать эту функцию, я знаю, но как организовать взаимодействие между hook-процедурой и моей программой? Если я правильно понимаю, при отображении dll в адресное пространство другого процесса все переменные и адреса функции настраиваются в адрасное пространство этого процесса и для двух разных процессов могут иметь разные значения. Значит нельзя просто сохранить, например, адрес функции моей программы и вызывать ее при получении сообщения, т.е. это не будет работать для процессов кроме моего собственного. Так как тогда дать знать моей программе, что было получено какое-то сообщение?
Здравствуйте, netie, Вы писали:
N>Здравствуйте! N>Вот такая вот проблема... Предположим, мне нужно отлавливать сообщения в системе и уведомлять о них свою программу. Как установить hook и правильно написать эту функцию, я знаю, но как организовать взаимодействие между hook-процедурой и моей программой? Если я правильно понимаю, при отображении dll в адресное пространство другого процесса все переменные и адреса функции настраиваются в адрасное пространство этого процесса и для двух разных процессов могут иметь разные значения. Значит нельзя просто сохранить, например, адрес функции моей программы и вызывать ее при получении сообщения, т.е. это не будет работать для процессов кроме моего собственного. Так как тогда дать знать моей программе, что было получено какое-то сообщение?
Можно через PostMessage какому-либо окну из твоего процесса. Хендлы окон уникальны для всех процессов в пределах сессии. (Только не передавай указатели через lParam )
Или зажечь какой-нибудь именованный объект синхронизации (event, mutex etc.). Эти имена тоже уникальны.
Здравствуйте, netie, Вы писали:
N>Если я правильно понимаю, при отображении dll в адресное пространство другого процесса все переменные и адреса функции настраиваются в адрасное пространство этого процесса и для двух разных процессов могут иметь разные значения.
Разные значения адресов — это не главное препятствие. Главным является то, что каждый процесс изолирован от всех остальных, т.е. вызвать функцию в другом процессе можно только через специальные механизмы. Поскольку хуковая длль внедряется в чужой процесс, с родным процессом она может общаться только посредством этих механизмов. N>Значит нельзя просто сохранить, например, адрес функции моей программы и вызывать ее при получении сообщения, т.е. это не будет работать для процессов кроме моего собственного. Так как тогда дать знать моей программе, что было получено какое-то сообщение?
Есть такой класс задач — Interprocess Communications (IPC). Почитай MSDN — узнаешь много интересного.
The following IPC mechanisms are supported by Windows:
Clipboard
COM
Data Copy
DDE
File Mapping
Mailslots
Pipes
RPC
Windows Sockets
Спасибо всем за ответы!
Я нашел то, что мне подходит. Если кому-то интересно, описано здесь — http://www.codeproject.com/dll/hooks.asp. На мой взгляд просто и эффективно, и именно то, что нужно для хуков.
Re[2]: Хуки windows
От:
Аноним
Дата:
15.06.05 07:29
Оценка:
Здравствуйте, netie, Вы писали:
N>Я нашел то, что мне подходит. Если кому-то интересно, описано здесь — http://www.codeproject.com/dll/hooks.asp. На мой взгляд просто и эффективно, и именно то, что нужно для хуков.