Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];

Вниз

Замять сообщение   Найти похожие ветки 

 
Kaurtsev   (2002-03-04 19:41) [0]

Братья земляне помогите!
Я отлавливаю при помощи хука на шелл какое либо событие, но как сделать что бы на этом оно и закончилось, как обрубить его что бы система его не получила? И где обрубать? В dll?


 
Song   (2002-03-04 20:10) [1]

обычно когда отлавилвают сообщении, пишут Procedure .... (Var Msg:TMessage);
Словечко Var обозначает, что сообщение по инструкции inherited уйдёт из вашей процедуры уже с теми изменениями, которые Вы можете сделать. Поэтому чтобы "замять" сообщение, обычно достаточно написать Msg:=0;


 
Юрий Зотов   (2002-03-04 20:41) [2]

> Kaurtsev © (04.03.02 19:41)

Хук WH_SHELL не позволяет модифицировать сообщения. Нужно ставить хук WH_GETMESSAGE.


> Song © (04.03.02 20:10)

1. Речь идет о глобальных хуках.
2. Есть подозрение, что вариант (Var Msg:TMessage) в сочетании с последующим Msg:=0 даже не откомпилируется.


 
Raptor   (2002-03-04 23:25) [3]

2 Kaurtsev
Не вызывать CallNextHookEx.


 
Dimaond Cat   (2002-03-05 01:56) [4]

если не вызывать Callnexthookex то сообщение замнется только для последующих в цепочке обработчиков, тогда как все предъидущие его нормально схавают.


 
Kaurtsev   (2002-03-05 09:46) [5]

Я пробовал через WH_GETMESSAGE, но она выдаёт беск вереницу 0 и 1,(отображаю WParam в Memo) а на нажатия кнопок, раскрытие окон и меню ноль внимания. В частности мне нужно запретить раскрытие стартового меню при нажатии микрофлага на клаве и Ctrl+Esc. Может поподробнее обьясните?


 
Raptor   (2002-03-05 10:42) [6]

2 Dimaond Cat
Дык, ясен перец. Но тут спасения нет, разве что всегда ставить хук самым первым в цепочке. Иначе никак.

2 Kaurtsev
Я пробовал через WH_GETMESSAGE, но она выдаёт беск вереницу 0 и 1,(отображаю WParam в Memo)
А ты не отображай. Ты лучше хелп почитай, что это значит. ;-)
Тем более, что основная информация про перехваченое сообщение находится в lParam, а не в WParam.


 
Fellomena   (2002-03-05 11:03) [7]

Если я не ошибаюсь, некоторые сообщения вообще нельзя модифицировать - на них можно только реагировать !
А некоторые можно "останавливать".
К примеру в процедуре обработке хука WH_KEYBOARD есть возможность "остановить" дальнейшее прохождение сообщения (Result:= 0/ not(0))

2 Raptor:
Если не вызывать CallNextHookEx, то не будет вызываться предыдущий хук. А, как ты знаешь, перед твоим хуком, даже если он первый, всегда стоит обработчик самой системы, который независимо от того вызовешь ты CallNextHookEx или нет - обработает сообщение. (опять же речь идёт не о всех типах сообщений)
Сам попробуй с разными типми хуков - убедишься :)


 
Raptor   (2002-03-05 22:54) [8]

2 Fellomena
Причем здесь обработчик системы? Если ставить хук на WH_GETMESSAGE, то система тут ничего не делает. Потоку посылается сообщение, а мы его перехватываем и не отдаем потоку. В результате получается, что с точки зрения потока этого сообщения как будто бы и вообще не было.
Но здесь проблема в другом. То что хочет автор вопроса можно сделать только ставя хук на WH_SHELL, а эти сообщения, в большинстве своем, только информативные. То есть изменить что то мы уже не можем. Мы только получаем информацию о каком-то уже состоявшемся событии.


 
Dimaond Cat   (2002-03-05 23:24) [9]

А вот докучи, если мы ставим наш процес, по приоритету, одним из первых, то будет ли его хук одним из первых в цепочке обработчиков сообщения? если кто знает ответьте, а то чесно говоря лень проверять.


 
Fellomena   (2002-03-06 10:40) [10]

2 Dimaond Cat:
НИКОГДА !
Хуки выстраиваются в цепочку строго по мере их установки и никак иначе.


 
Dimaond Cat   (2002-03-06 22:23) [11]

это плохо



Страницы: 1 вся ветка

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

Наверх





Память: 0.47 MB
Время: 0.006 c
1-26101
Dimok
2002-04-26 14:26
2002.05.09
У меня два вопроса.


4-26310
Shadow
2002-03-08 13:58
2002.05.09
Эмуляция нажатия клавиши


3-26039
gyg
2002-04-16 21:19
2002.05.09
Можно ли узнать имя пользователя в Interbase?


3-26018
weak
2002-04-16 14:05
2002.05.09
удаление записи


1-26168
apih
2002-04-25 12:20
2002.05.09
MediaPlayer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский