![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Какие есть еще пути реализации глобальных хуков? [D6, Win95/98, WinME, NT4, Win2k, WinXP]
IGOREK © (2002-04-10 18:21:00)Прочитал статью "Hooks - аспекты реализации", где используется механизм Memory Mapped Files для сохранения дескриптора глобального хука для вызова CallNextHookEx
Резюме: использован тот факт, что при загрузке DLL в адресное пространство любого процесса сохраняются константы и типы, описанные в DLL (в отличие от переменных). В общем предложенное решение несколько громоздко.
Кто может предложить какие-то другие пути для решения проблемы корректного вызова следующей процедуры-обработчика хука для глобальных хуков, реализованных в DLL?
Для разных ОС.
Fellomena (2002-04-16 10:45:00) [1]До кучи: CreateNamedPipe - но это только для NT.
Что забавно - в Win9x работать с именоваными пайпами можно, но создавать - нет =)
А анонимные возвращают ескрипторы для записи и для чтения, но что бы эти дескрипторы стали известны другому приложению - надо опять же их в это другое приложение как-то передавать ;)
Fantasist (2002-04-15 06:01:00) [2]Как это реализованно в системе точно сказать не могу(пока) - однако это явно не название того же. Сегмент данных, будь он разделяемым или нет - это сегмент данных и он находиться в исполняемом файле или dll наряду с сегментами кода, а MMF - это механизм сами знаете чего. И как уже было отмеченно, работать с ним через API громозко и не удобно.
SerVS (2002-04-14 23:18:00) [3]>Fantasist
Не работал с этими сегментами, но уверен что сделаны они через MMF, наверное просто разные названия одного итогоже.
Fantasist (2002-04-14 09:05:00) [4]Конечно есть другой способ. Сегменты данных можно сделать разделяемыми, поддерживается в Windows такая вещь. В VC то делается элементарно:
#pragma data_seg("MYSECT")
int SomeHandle = 0;
#pragma data_seg()
#pragma comment(linker, "/section:MYSECT,rws") //read,write, shared
Дальше за вас все делают компилятор и линкер. Если в дельфях это не поддерживается в явном виде, то можно попробывать это сделать через асм. Хотя через него можно создать сегмент данных, его свойство надо прописать непосредственно в загаловке собранного файла. А это надо знать его формат. :(
SerVS (2002-04-11 17:47:00) [5]Fellomena забыла еще про реестр написать ...
ЫЗ. Если будешь делать через онный, не забудь клас TRegistry использовать ;)
Alx2 (2002-04-11 13:50:00) [6]Но, кроме обычных файлов, все это Windows реализует через MMF :)
Fellomena (2002-04-11 12:10:00) [7]2 IGOREK: конечно же возможно и не одним способом.
Можно с помощью сообщений, можно используя интерфейсы попробовать, можно через обычные файлы, clipboard (коряво), и т.д.
IGOREK (2002-04-10 20:47:00) [8]Исходник конечно работает, но возможно ли как-то иначе (покороче и/или не через MMF)? Думаю мастера могли бы что-то предложить...
Интерес чисто теоретический.
SerVS - S (2002-04-10 19:58:00) [9]А чем тебе этот не нравится ;)? Тебе ж выложили готовый, работающий (сам проверял на 98 и 2к) исходник, что ты еще хочешь?