SetWindowsHookEx()
От: Блудов Павел Васильевич Россия  
Дата: 06.07.01 04:08
Оценка:
Никто не сталкивался с такой проблемой:

если создать глобальный %subj% из к-л нитки, а затем выйти из нее, то кто-то нахально вызывает UnhookWindowsHookEx.
Соответственно, DLL-ка отовсюду выглужается. Это что, так задумано? Или у меня глюки?

Надеюсь на помошь,
Павел.
Re: SetWindowsHookEx()
От: Alex Fedotov США  
Дата: 06.07.01 14:49
Оценка:
Здравствуйте Блудов Павел Васильевич, вы писали:

БПВ>если создать глобальный %subj% из к-л нитки, а затем выйти из нее, то кто-то нахально вызывает UnhookWindowsHookEx.

БПВ>Соответственно, DLL-ка отовсюду выглужается. Это что, так задумано? Или у меня глюки?

Не знаю, как это было задумано, но работает именно так. Объекты hook имеют явный thread affinity,
например, UnhookWindowsHookEx из другого потока не работает. Внятно это, к сожалению, нигде не написано, так что базируюсь на личном опыте.
-- Alex Fedotov
Re: SetWindowsHookEx()
От: kanych  
Дата: 09.07.01 05:15
Оценка:
Здравствуйте Блудов Павел Васильевич, вы писали:

В МСДН и в хелпе по Win32 API точно говорится что при выходе из цепочки поставившей ловушку система сама ловушку снимает. Но не снимая ловушки можно выхватить глюк.

У Рихтера по этому поводу в примере сделано так: ставит ловушку, зацикливает цепочку на выбор месседжей, при определенном месседже цикл завершается и ловушка снимается.

kanych

БПВ>Никто не сталкивался с такой проблемой:


БПВ>если создать глобальный %subj% из к-л нитки, а затем выйти из нее, то кто-то нахально вызывает UnhookWindowsHookEx.

БПВ>Соответственно, DLL-ка отовсюду выглужается. Это что, так задумано? Или у меня глюки?

БПВ>Надеюсь на помошь,

БПВ>Павел.
Re[2]: SetWindowsHookEx()
От: Блудов Павел Васильевич Россия  
Дата: 16.07.01 02:10
Оценка:
Здравствуйте kanych, вы писали:

K>В МСДН и в хелпе по Win32 API точно говорится что при выходе из цепочки поставившей ловушку система сама ловушку снимает. Но не снимая ловушки можно выхватить глюк.


K>У Рихтера по этому поводу в примере сделано так: ставит ловушку, зацикливает цепочку на выбор месседжей, при определенном месседже цикл завершается и ловушка снимается.


K>kanych


Так и сделали. Вместо ::SetwindowsHookEx() вызывается ::CreateThread(), а ::SetwindowsHookEx() вызывается от-туда.
Соответственно, вместо ::UnHookWindowsHookEx() имеем ::PostThreadMessage() + ::WaitForSingleObject().

Криво это как-то.
Павел.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.