Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];




Вниз

Memory maped files, hooks, DLL s, global heap - помогите разобраться. 


Latspell   (2001-12-21 16:39) [0]

Здравствуйте, коллеги !
Возникла такая ситуация: на моём компьютере при загрузке одна из программ (не моя) устанавливает глобальный hook на нажатие правой кнопки мыши.
Раньше всё было прекрастно - при щелчке на клиентскую область окна Explorer-а содержащего, к примеру, вид папок и файлов на диске С hook срабатывал и после его срабатывания выпадала стандартная менюшка.
Сейчас мне понадобилось поставить ещё один hook на это же событие. Моя программа ставит hook и пересылает сообщение дальше по цепочке.
Но проблема оказалось в том, что мой hook, находящийся в конце очереди hook-ов выполняется, но процедура передачи сообщения дальше не происходит или происходит не правильно.
После прочтения литературы выяснил, что т.к. мой hook запускается из DLL, то данные к нему относящиеся необходимо объявлять как глобальные и использовать для этого надо механизм Windows, - файлы отображённые в память.
При попытке разобраться в структуре работы с этими файлами с помощью SDK зашёл в тупик и мало того, в голове моей образовался сумбур, даже относительно того, что знал.
Итак - если у вас хватит терпения,- помогите мне.
Мои соображения: при загрузке DLL, её код физически помещается в кучу (т.е. всё что есть в DLL по битикам переносится в оперативную память). При попытке других приложений воспользоваться уже загруженной DLL на АП процесса, который загружает DLL, проецируются данные, находящиеся в кучи, т.е.
в АП этого процесса передаются адреса ф-ий и процедур имеющихся в DLL, а так же в АП отводится свой сегмент под данные загруженной DLL. Таким образом, при обращении из моей программы к ф-ии DLL, обработка данных, хранящихся в "моём" АП производится кодом, находящимся в куче - это верно ?
Теперь не могли бы вы объяснить мне каким образом hook поставленный не моей программой "узнает" о том сегменте памяти в куче, которая будет хранить данные после того как сработает мой hook и передаст сообщение дальше ? (это относительно механизма файлов отражённых в память).
Если я храню какие-то данные в куче (а именно это, как я понял, позволяет делать механизм отражения в память), то при завершении работы моего процесса эти данные будут уничтожены или останутся там, если я сам не позабочусь о их удалении.

Хотелось бы получить квалифицированный ответ на данные темы.
Если не сложно - приведите примеры или вышлите исходники.

Всем заранее благодарен.



Latspell   (2001-12-21 16:44) [1]

Прошу прощения, забыл ещё один вопрос:
не секрет, что последней в очереди hook-ов стоит системная ловушка, т.е. когда я нажимаю на правую кнопку мышы, то все ловушки делают своё дело, передавая полученное сообщение дальше вплоть до конца.
Я попробывал намерено не передавать сообщение о нажатии кнопки, но всё равно меню при нажатии кнопки выпадает, ведь показ меню - это и есть реакция системной ловушки на нажатие правой кнопки мыши в клиентской области окна, или я не прав ?
В таком случае получается, то системная ловука срабатывает всегда ?



Юрий Зотов   (2001-12-21 21:00) [2]

http://delphi.mastak.com/cgi-bin/forum.pl?look=1&id=992616736&n=2




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.014 c
1-66617           Slav                  2002-02-06 14:14  2002.02.21  
Задачка для тех, кто работал в Excel


3-66476           VLL                   2002-01-29 09:45  2002.02.21  
Проблемы с ODBC


1-66572           Алиса                 2002-02-05 15:29  2002.02.21  
Глюк с while?


7-66700           PavelS                2001-10-26 15:09  2002.02.21  
Кто нибудь помогите !!!!


7-66692           Кол_бас               2001-11-18 15:05  2002.02.21  
Количество пиков спикера