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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2014, 11:54   #1
Питерский2
Пользователь
 
Регистрация: 20.05.2014
Сообщений: 29
По умолчанию Вопрос по ловушкам

Здравствуйте, возник вопрос.
Может он и дилетантский, но ответа в интернете на него не нашел. Буду благодарен за маленький ликбез))

Допустим я ставлю глобальную ловушку на то или иное событие, например перемещение мыши, вот оно происходит, вызывается процедура обратного вызова, которая делает какие-то длительные вычисления, в это время до возврата ею управления опять происходит это событие, то что произойдет в этом случае?
Питерский2 вне форума Ответить с цитированием
Старый 06.10.2014, 12:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ничего. Пока твой хук не отработает система не ответит. По факту если в хуке будет цикл типа while true do ; винда тупо зависнет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.10.2014, 13:03   #3
Питерский2
Пользователь
 
Регистрация: 20.05.2014
Сообщений: 29
По умолчанию

Видимо я чего-то не понял, но такой код:
Код:
...
Invoke SetWindowsHookEx,WH_KEYBOARD_LL,Offset HookPrc,[hInst],0
...

HookPrc Proc
Push EBP
...
PushAD  

    Invoke MessageBoxA,0,Offset Mess,Offset Mess,0
Cukl:
Jmp Cukl

PopAD
Pop EBP
Pop [Tmp]                         ;Cохраняем адрес возврата
Push DWord Ptr [hHook]
Call CallNextHookEx
Jmp [Tmp]                         ;вместо Ret
HookProc EndP
Совсем не вешает Винду, при каждом нажатии выводится контрольное сообщение, хотя возврат из HookProc никогда не происходит...
Питерский2 вне форума Ответить с цитированием
Старый 06.10.2014, 13:33   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну тут я не объясню. Мои хуки на ХР вешали систему намертво. Если я там тяжелые вычисления ставил.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.10.2014, 13:42   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Call CallNextHookEx
помоему это передает сообщение дальше, а не ret.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.10.2014, 14:00   #6
Питерский2
Пользователь
 
Регистрация: 20.05.2014
Сообщений: 29
По умолчанию

Цитата:
Цитата:
Call CallNextHookEx
помоему это передает сообщение дальше, а не ret.
Нет, МСДН говорит что управление таки возвращается из CallNextHookEx.
Впрочем, это не важно так как в приведенном выше примере эта часть кода не исполняется)
А вопрос с ловушкой так и не решился...
Питерский2 вне форума Ответить с цитированием
Старый 06.10.2014, 15:18   #7
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Мне кажется, что не нужно забивать себе голову. Реентерабельность вызовов -- задача ОС, если речь не о DOS идет. Вероятней всего, события мыши отправляются ловушкам асинхронно, раз зависания не происходит.
Vapaamies вне форума Ответить с цитированием
Старый 09.10.2014, 13:21   #8
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Не знаю насчёт всех хуков, но как минимум *_LL могут прибиваются системой по таймауту (где-то в реестре ключ есть с максимальным временем).
Somebody вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос Kolaps Общие вопросы C/C++ 4 26.04.2012 15:15
Вопрос по VB 6 JackRND Помощь студентам 0 17.02.2010 20:33
Вопрос по mySQL + Вопрос по RichEdit HTL Общие вопросы Delphi 4 01.01.2010 20:22
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10