понедельник, 17 января 2011 г.

Для чего нужен параметр HINSTANCE у SetWindowsHookEx?

Это перевод What is the HINSTANCE passed to SetWindowsHookEx used for? Автор: Реймонд Чен.

Функция SetWindowsHookEx принимает параметр HINSTANCE. Документация поясняет, что это описатель DLL, содержащей процедуру ловушки. Зачем оконному менеджеру нужен этот описатель?

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

Вот почему код ловушки должен находится в DLL: вы не можете загрузить EXE внутрь другого EXE.

Ловушки WH_KEYBOARD_LL и WH_MOUSE_LL являются исключениями для этого правила. Эти две ловушки не внедряются - как указано в описании их функций. Вместо этого ловушка вызывается в контексте оригинального потока.

OK, вооружённые этой информацией, вы, вероятно, сможете решить проблему этого человека.

См. также.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.