Прижеденный ниже код используется для отлавливания клика мыши во всей системе.
Хук ставится из EXE, написанного на VB.
Закомментированная строка посылает основному окну сообщения о каждом клике.
Однако, заманчиво делать простой вызов функции, находящейся в стандартном
модуле VB программы вместо сабклассинга. Тут появляется проблема.
Код работает только при кликание на своем окне. При переходе в другое перестает
(также и при возврате обратно в свое окно).
Здравствуйте, pitomnik, Вы писали:
P>Код работает только при кликание на своем окне. При переходе в другое перестает P>(также и при возврате обратно в свое окно).
DLL существует в адресном пространстве того процесса, в котором произошло событие, перехваченное хуком. Соответственно, все локальные и глобальные переменные содержат мусор. Есть решения — завести в системе адресуемую сущность — очередь сообщений или именованную трубу, и через не данные пропихивать, или создать shared-секцию в dll, разделяемую всеми dll, и в ней хранить нужные данные — хендл она или что еще.
Здравствуйте, m.a.g., Вы писали:
MAG>Здравствуйте, pitomnik, Вы писали:
P>>Код работает только при кликание на своем окне. При переходе в другое перестает P>>(также и при возврате обратно в свое окно).
MAG>DLL существует в адресном пространстве того процесса, в котором произошло событие, перехваченное хуком. Соответственно, все локальные и глобальные переменные содержат мусор. Есть решения — завести в системе адресуемую сущность — очередь сообщений или именованную трубу, и через не данные пропихивать, или создать shared-секцию в dll, разделяемую всеми dll, и в ней хранить нужные данные — хендл она или что еще.
MAG>2moder: перемести в win32api, plz.
Спасибо за отклик!
Хочу обратить ваше внимание на то, что все необходимые
данные находятся в shared секции: хэндлер хука и адрес
функции. Плюс еще раз повторю, что с PostMessage код
работает 100% корректно.
Здравствуйте, pitomnik, Вы писали:
P>Спасибо за отклик!
Да не за что
P>Хочу обратить ваше внимание на то, что все необходимые P>данные находятся в shared секции: хэндлер хука и адрес P>функции. Плюс еще раз повторю, что с PostMessage код P>работает 100% корректно.
Только при вызове в чужом адресном пространстве указатель на функцию указывает куда-то в область процесса, в котором мы сейчас выполняемся, и, разумеется, никакой нашей функции-обработчика там нет. Так что взаимодействие придется организовывать через какие-либо системные примитивы.