Глобальные хуки

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Глобальные хуки

Сообщение GSerg » 30.05.2004 (Вс) 12:12

Библа для установления глобальных хуков, исходник оной на Дельфи и пример юзания на VB. Информирование о глобальных событиях сделано через PostMessage – thread-safely, имхо.

Нельзя ставить два хука одного типа из библиотеки, расположенной по одному и тому же пути. Да она вам и не даст.
Можно переместить библу в другое место (или переименовать) – тогда хуки можно ставить по новой из этого экземпляра библы.
Оч. рекомендуется перед завершением работы приложения делать RemoveHook. Экстремальные пофигисты могут этого не делать...

Немногочисленные комментарии – в коде :)


Очень хотелось бы узнать, работает ли эта бяка на NT-based. Запостите результат опытов, плз. Сохраните всё сначала... Если работает, статью напишу :)
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось GSerg 01.06.2004 (Вт) 6:39, всего редактировалось 3 раз(а).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 30.05.2004 (Вс) 13:04

М-дя. Разошелся ты чего-то, это точно :)
Результат тестинга: Ошибка приложения:
Инструкция по адресу...обратилась к памяти по адресу... Память не может быть written. :(
И так всегда, что бы я ни делал... :?
Win XP.
VB - это звучит!

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 30.05.2004 (Вс) 13:51

Та же ось, та же хрень... :(
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.05.2004 (Вс) 13:59

Уточняю условия эксперимента: экзешник нужно делать, иначе конфликт с хуками самой IDE...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 30.05.2004 (Вс) 14:07

Сначала:
Ошибка приложения, инструкция по адресу 0x043a38d5, обратилась к памяти по адресу 0x00000000. Память не может быть written.
Затем
MsgBox "Runtime error 216 at 043A38D5", ,"Error"
Затем ошибка VB:
Error 53, 'File not found', выделяет строку "Installhook WM_KEYBOARD, Me.hWnd, WM_LBUTTONUP".
DLL точно там есть. Пробовал кинуть в system32, та же хрень.

Затем (после перезапуска) адрес был другой, но какой - к сожалению, не записал - все повисло.

После перезапуска VB - ошибка, как в первый раз.

Ось та же.
--------------------
Самое интересное, при попытке зарегистрировать ее через regsvr32, появилась те же 2 окна, при этом в конце концов он тоже сказал, что LoadLibrary("GHooks.dll") failed: file not found.
:?: :?: :?:
Нет меня больше

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 30.05.2004 (Вс) 14:08

Да, при попытке открыть GHooks.dpr Delphi намертво повис. :?:
Нет меня больше

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.05.2004 (Вс) 14:10

Библа должна быть просто в каталоге с прогой. Но IDE не увидит её, если проект открыт через меню открытия. А если даблкликом по файлу проекта - то увидит.

В любом случае, всё ясно - не открывается filemapping. Кто в нём сечёт хорошо? Я уже весь msdn перерыл, написано - при дефолтовом дескрипторе безопасности должен открываться всеми процессами. А вот не открывается...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.05.2004 (Вс) 14:11

A.A.Z. писал(а):Да, при попытке открыть GHooks.dpr Delphi намертво повис. :?:

А вот это нонсенс... Ну блокнотом открой :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 30.05.2004 (Вс) 14:13

Даблкликом он был открыт.
Нет меня больше

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 30.05.2004 (Вс) 14:13

Нафига? Все равно я в нем ни бум-бум!
Нет меня больше

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.05.2004 (Пн) 9:00

Покопался, покопался в описании security system...
Попробуем такой вот вариант.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.05.2004 (Пн) 14:47

(задумчиво) Ну и где же этот вредный, нехороший A.A.Z., который должен всё это тестить на своей XP...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 31.05.2004 (Пн) 15:43

Сначала:
Инструкция по адресу "0x00d93965" обратилась к памяти по адресу "0x00000000". Память не может быть "written".

"OK" -- завершение приложения
"Отмена" -- отладка приложения
"По фиг" -- продолжение работы приложения
"Суицид" -- повеситься на люстре перед компьютером


Потом:
Run-time error 216 at 00D93965

Далее:
Run-time error '48':
File not found: 'GHooks.dll'
Моду создают модоки, а распространяют модозвоны.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.05.2004 (Пн) 17:05

Секундочку...
Так что, библиотека просто не находится почему-то?
Бред какой-то...

Ладно, давайте так. Вот два экзешника, которые реализуют данный способ создания дескриптора полного доступа. Без библиотек. Запускаем сначала 1, потом 2. Рушиться не должны, проверка результатов вызова каждой функции.
У вас нет доступа для просмотра вложений в этом сообщении.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 31.05.2004 (Пн) 17:52

Вот он я!
Не, не рушатся, пишут все правильно... :roll:
Нет меня больше

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 31.05.2004 (Пн) 20:37

Да, тут всё пашет...
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.06.2004 (Вт) 3:07

Ну и какого тогда?...
И там, и там абсолютно одинаковый способ создания дескриптора :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.06.2004 (Вт) 4:17

Так... Разберём механизм по порядку...

Загружается главная (и пока единственная) копия библиотеки. При этом создаётся filemapping с полным доступом. Создание проходит успешно, поскольку такого filemapping ещё нет. Потом юзер вызывает installhook. Это вызывает неявное loadlibrary для каждого процесса в системе. Каждая из загруженных копий при старте пытается получить доступ к общей памяти, и у неё это должно получиться, ибо, как мы выяснили, дескриптор полного доступа создаётся правильно.
Потом юзер вызывает removehook. Каждая из копий библиотеки перестаёт получать сообщения о нажатиях. Прога на VB завершается. Происходит выгрузка главной копии библы с предварительным отсоединением её от общей памяти. Но все остальные копии библы продолжают оставаться загруженными, выгрузить их нельзя (msdn), поэтому общая память с данным конкретным именем остаётся существовать в системе.
Когда же юзер снова запускает прогу, та получает доступ к общей памяти только на чтение, потому что память уже создана, и библиотека делает вывод, что она не главная копия... Хм...
Естественный вывод – давать полный доступ всем копиям. Всё равно запись производится только при установке хука, а это делает только юзер и только из главной копии...

У кого-то здесь есть подпись – чтобы понять свои ошибки, их нужно написать. Оч. мудрый чел. У меня же каждая копия библы пишет в общую память указатели на свои локальные функции, в результате там оказываются указатели на последний экземпляр библы... Да.....

Ещё апдейт...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 01.06.2004 (Вт) 9:02

Твои консольные приложения идут ОК, а новая версия с правкой -
глючит точно так же.
VB - это звучит!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.06.2004 (Вт) 11:00

Тогда я не знаю ничего.
Механизм создания описателя правильный. Сама библа прекрасно работает на 98. А больше в ней ничего и нет.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 01.06.2004 (Вт) 14:26

Не спорю. У меня в 98 тоже все пашет. А в ХР - нет.
VB - это звучит!


Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37

    TopList  
cron