Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2007, 18:42   #11
Slovinsky
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 79
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Хм. я дмал что ты на чем то проггеришь только не на делфе, извини.

Итак Хуки - весчь удобная. Литературы о них ну очень много. И примеров немерянно. Вот один из них : http://delphiworld.narod.ru/base/glo...oard_hook.html

А вот и чтиво: http://www.infocity.kiev.ua/prog/del...elphi184.phtml
Ага, только в обоих статьях одна и та же серьезная ошибка - вызов CallNextHookEx неправильный Что не удивительно, я пока мало встречал где бы ее (ошибки) не было.
Slovinsky вне форума Ответить с цитированием
Старый 26.10.2007, 21:33   #12
Gorlum
 
Регистрация: 25.10.2007
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Slovinsky Посмотреть сообщение
Ага, только в обоих статьях одна и та же серьезная ошибка - вызов CallNextHookEx неправильный Что не удивительно, я пока мало встречал где бы ее (ошибки) не было.
С этого мест поподробнее пожалуйтста )
Gorlum вне форума Ответить с цитированием
Старый 26.10.2007, 21:46   #13
Slovinsky
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 79
По умолчанию

Цитата:
Сообщение от Gorlum Посмотреть сообщение
С этого мест поподробнее пожалуйтста )
Сразу карты раскрыть или дать возможность самим догадаться?
Slovinsky вне форума Ответить с цитированием
Старый 27.10.2007, 12:23   #14
Gorlum
 
Регистрация: 25.10.2007
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Slovinsky Посмотреть сообщение
Сразу карты раскрыть или дать возможность самим догадаться?
На данный момент, читай выше, я даун в программировании, так что гадать могу долго
Поэтому мой выбор - сразу раскрыть карты
Gorlum вне форума Ответить с цитированием
Старый 27.10.2007, 17:28   #15
Slovinsky
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 79
По умолчанию

Цитата:
На данный момент, читай выше, я даун в программировании, так что гадать могу долго
Тогда боюсь объяснение вряд ли поможет В общем, вызов CallNextHookEx в таком виде бесполезен, что с ним, что без него. В общем, ситуация следующая:

1. Адресные пространства процессов изолированы друг от друга. Адрес памяти в одном процессе, невалиден в другом.
2. При загрузки DLL ее образ проецируется на адресное пространство (далее АП) загружающего процесса.
3. Установка хука с помощью SetWindowsHookEx не приводит к загрузке библиотеки в адресные пространства всех процессов. Ее загрузит только тот процесс, который ее установил. Потом уже каждый процесс, инициирующий срабатывание ловушки при этом самостоятельно загружает библиотеку в свое адресное пространство. Т.е. как только какое-либо ваше приложение получит клавиатурныйй ввод - в этот момент оно загрузит в свое АП библиотеку с ловушкой. Вот это очень важно понимать. ФУНКЦИЯ ЛОВУШКИ ВЫПОЛНЯЕТСЯ НЕ В КОНТЕКСТЕ УСТАНОВИВШЕГО ЕЕ ПРОЦЕССА, А В КОНТЕКСТЕ ПРОЦЕССА, КОТОРЫЙ ЕЕ (ЛОВУШКИ) ВЫЗОВ ИНИЦИИРОВАЛ!!!
4. Глобальные переменные (коей в статьях объявлен дескриптор ловушки) хранятся в разделе данных DLL-файла, попытка записи в который приводит не к записи в файл непосредственно, а к копированию куска файла в память, проецированию его в закрытое АП процесса, и модификации этой копии в памяти. Другими словами, изменение переменной в библиотеке, загруженной одним процессом, никак не скажутся на значение этой переменной в библиотеке, загруженной другим процессом. Из этого видно, что присваивает значение переменной-дескриптору тот процесс, который ловушку устанавливает. А CallNextHookEx вызывает тот процесс, который инициировал срабатывание ловушки. В общем случае это может быть любой процесс, не обязательно тот, который ловушку установил. А раз так, то значение глобальной переменной дескриптора в его адресном пространстве оказывается неинициализированным, т.е. равным нулю. Вы передаете первым параметром CallNextHookEx ноль, вместо действительного значения дескриптора. Разумеется функция срабатывает неправильно.

Все, что я описал, подробно описано здесь:
http://www.delphikingdom.com/asp/vie...?catalogid=548
На данный момент, это единственная известная мне "правильная" статья по хукам. К сожелению...
Slovinsky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитация нажатия клавиш Air Свободное общение 28 04.02.2010 12:38
У меня возникла небольшая проблемка с определением последнего активного окна. hoza_syl Помощь студентам 6 23.05.2008 17:03
Эмуляция нажатия нескольких клавиш -=Shad0www Общие вопросы Delphi 3 12.05.2008 08:13
Имитация нажатия комбинации клавиш Zeraim Win Api 15 05.05.2008 20:35
программа по эмуляции нажатия клавиш sr_lexx Win Api 3 03.12.2007 15:40