| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Global Mouse Hook |
| Автор: FiMa1 16.6.2008, 18:55 | ||||||
| Добрейшего времени суток, друзья! Я столкнулся с довольно распространенной, судя по результатам поиска, проблемой, но все же не смог решить ее. Мне нужно глобально отлавливать активность мыши (click, double click). Я воспользовался этим примером - http://cppbuilder.ru/articles/0007.php, но смог добиться только локального перехвата кликов мыши, похоже созданная мною dll проецируется все же на пространство вызывающего процесса, т.е., по просту, моего приложения. Кто-нибудь может подсказать как мне сделать хук глобальным? Может быть нужно еще что-то предпринять для компиляции с разделяемым сегментом данных (Shared)? Заранее спасибо за помощь. Для удобства приведу код здесь: --- код mousehook.dll ---
--- код исполняемого приложения. mousehook.h ---
--- код исполняемого приложения. mousehook.cpp ---
|
| Автор: jonie 16.6.2008, 19:16 | ||
| 1) SendMessage вашему окну плозая идея. используйте PostMessage. 2) if (DLL_PROCESS_ATTACH ==reason ) DllInstance = hinst; добавьте в DllMain 3) на это я думаю тоже можно забить :
4) незабывайте проверять на ошибки. |
| Автор: FiMa1 16.6.2008, 21:22 | ||||||||||||||||
jonie, спасибо за справедливое замечание. Я так и планировал в конечном счете заменить SendMessage на PostMessage. Для последователей цитата из http://www.rsdn.ru/article/baseserv/hookdll.xml:
Ммм... даже не знаю, позаимствовал отсюда - http://www.rsdn.ru/article/baseserv/hookdll.xml:
И вот еще от http://interprogramm.narod.ru/WinApi.htm:
Я попробовал собрать dll в VC2005 с помещением хэндла процесса в разделяемый сегмент данных, но в этом случае dll не загружается корректно в исполняемое приложение - обращение по нулевому адресу памяти... --- код mousehook.dll (VC2005) ---
|
| Автор: jonie 17.6.2008, 00:11 |
| убери прагмы. по умолчанию все итак должно быть ок (если я чего не путаю). могу только дать пример длл-ки на asm.. когдато писал (правда там хук клавы, но фигня одна). простенькая и без наворотов....она работала) кстати, есть низкоуровневые хуки, они не требуют длл-ки... |
| Автор: FiMa1 18.6.2008, 23:13 | ||||
jonie, спасибо еще раз помощь!
На том и порешим. Ниже код рабочего низкоуровневого хука для мыши. Вот только по закрытии формы, все жестко подвисает, но это уже совсем другая история
|