![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| FiMa1 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: нет Всего: 6 |
Добрейшего времени суток, друзья!
Я столкнулся с довольно распространенной, судя по результатам поиска, проблемой, но все же не смог решить ее. Мне нужно глобально отлавливать активность мыши (click, double click). Я воспользовался этим примером - Системный хук, но смог добиться только локального перехвата кликов мыши, похоже созданная мною dll проецируется все же на пространство вызывающего процесса, т.е., по просту, моего приложения. Кто-нибудь может подсказать как мне сделать хук глобальным? Может быть нужно еще что-то предпринять для компиляции с разделяемым сегментом данных (Shared)? Заранее спасибо за помощь. Для удобства приведу код здесь: --- код mousehook.dll ---
--- код исполняемого приложения. mousehook.h ---
--- код исполняемого приложения. mousehook.cpp ---
|
||||||
|
|||||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
1) SendMessage вашему окну плозая идея. используйте PostMessage.
2) if (DLL_PROCESS_ATTACH ==reason ) DllInstance = hinst; добавьте в DllMain 3) на это я думаю тоже можно забить :
4) незабывайте проверять на ошибки. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| FiMa1 |
|
||||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: нет Всего: 6 |
jonie, спасибо за справедливое замечание. Я так и планировал в конечном счете заменить SendMessage на PostMessage. Для последователей цитата из Хуки и DLL:
Ммм... даже не знаю, позаимствовал отсюда - Хуки и DLL:
И вот еще от WinAPI: Hook System:
Я попробовал собрать dll в VC2005 с помещением хэндла процесса в разделяемый сегмент данных, но в этом случае dll не загружается корректно в исполняемое приложение - обращение по нулевому адресу памяти... --- код mousehook.dll (VC2005) ---
|
||||||||||||||||
|
|||||||||||||||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
убери прагмы. по умолчанию все итак должно быть ок (если я чего не путаю).
могу только дать пример длл-ки на asm.. когдато писал (правда там хук клавы, но фигня одна). простенькая и без наворотов....она работала) кстати, есть низкоуровневые хуки, они не требуют длл-ки... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| FiMa1 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: нет Всего: 6 |
jonie, спасибо еще раз помощь!
На том и порешим. Ниже код рабочего низкоуровневого хука для мыши. Вот только по закрытии формы, все жестко подвисает, но это уже совсем другая история
Это сообщение отредактировал(а) FiMa1 - 18.6.2008, 23:14 |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |