![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| sani79 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
Как перехватить сообщение windows до начала его обработки системой и в определенном случае отменить его обработку. Например сообщение WM_SYSKEYDOWN, в зависимости от того какая клавиша нажата либо пропустить сообщение, либо блокировать его так как будто его не было. ?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 2 Всего: 250 |
Это сообщение отредактировал(а) Girder - 18.1.2006, 10:37 |
|||
|
||||
| sani79 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
Спасибо за ответ. Но вопрос далее - а как быть если сообщение нужно отменить, не передавать его дальше вообще, либо передать какое то другое вместо него?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 2 Всего: 250 |
1) Чтоб передать сообщение системе нужно вызвать перекрытый метод: inherited begin ..... // Обработка сообщения до системы inherited // Вызов системной ф-ции обработки .... // Обработка сообщения после системы end; 2) Если не хочешь передовать не вызывай этот метод. 3) Если хочешь передать при условии, поставь условие: if ... then .... else inherited case ... of .... else inherited 4) Если хочешь послать другое сообщение, пошли другое сообщение с помощью Sendmessage (Handle, Msg, WParam, LParam) |
|||
|
||||
| FRAGNATIC |
|
|||
|
..::Свирепый Кодер::.. ![]() ![]() Профиль Группа: Участник Сообщений: 901 Регистрация: 17.10.2004 Где: ICQ Репутация: нет Всего: 11 |
hook поставить =)
|
|||
|
||||
| sani79 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
Спасибо за советы. В общем у меня все получилось, единственно сейчас пробую ршение через хук и есть проблемка... написал dll:
Ловушка срабатывает, но следом возникает ошибка и далее вплоть до зависания винды... сейчас разбираюсь... длл писал на основе нескольких разных примеров, возможно что-то недопонял. Если кто видит ошибку, буду признателен если укажите... насколько я понимаю проблема в передачи сообщения после срабатывания ловушки.... |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Процедура хука работает в контексте процесса который послал сообщение. Перед вызовом длл подключается к этому процессу и работает с собственной копией данных. Поэтому переменная HHook в теле процедуры хука у тебя равна нулю (присваивание касается копии переменной для процессы установившего хук, все будет работать только если ты установишь хук не для всех потоков, а только своих). Поэтому в CallNextHookEx ты передаешь нуль - так не надо.
Параметр wParam не смотря на название имеет тот же тип что и lParam (тоже 4 байта). Есть еще одна не критическая ошибка, но лучше бы тебе в этом разобраться. Ты устанавливаешь хук типа WH_GETMESSAGE, а процедуру хука пишешь как для WH_SYSMSGFILTER. Тебе повезло что для обоих типов lParam ссылается на одинаковою запись. Но не для всех типов это так, и если ты изменишь тип на какой-нибудь еще, то надо переписать и процедуру хука. Еще эти типы отличаются значением параметра code, но ты его не анализируешь (Почему?) - в общем это тебе еще повезло. Кстати, CallNextHookEx нужно вызывать или не вызывать в зависимости от этого самого code -------------------- Обижено школьников: 8 |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |