Три вопроса: 1. SetWindowsHookEx(WH_GETMESSAGE,...) не вешается на первичный поток, который был создан и сразу приостановлен(CREATE_SUSPENDED). На сколько я понял – это из-за 'WH_GETMESSAGE'. Посоветуйте на что еще можно повесить хук для того, чтобы он работал в 98-XP. 2. Мне нужно, чтобы чужой поток, на который я делаю хук, выполнял определенный код, когда мой поток вызывает UnhookWindowsHookEx(). Как это лучше сделать? 3. Как лучше передать информацию(строка + хэндл) из потока на который поставлен хук в поток, который устанавливал хук? Я так понимаю, что потоку на который вешается хук надо будет передавать свой ThreadId? Как это лучше сделать? Выслушаю любые мысли. Заранее - большое СПАСИБО.
1) Видимо из-за CREATE_SUSPENDED ) 2) такой вариант я бы использовал: перед вызовом unhook ручками рассылать всем копиям хука уведомления (например,собственное сообщение во все оконные функции) 3)MemoryMappedFile имхо.
1) Посоветуйте на что еще можно повесить хук для того, чтобы он работал в 98-XP? MSDN читал, но там нет ничего про CREATE_SUSPENDED, видимо надо логически догадаться, а у меня знаний про хуки не достаточно. 2) А если в dll'ке будет объект моего класса, который будет выполнять необходимые действия при дестрое? На сколько это корректно? 3)Громоздко, но пока ничего лучше не примал.
1) Обязательно креате суспендед? или тебе нужно запускаться в каждом процессе? 2) Тоже выход - обрабатывать DLL_PROCESS_DETACH Но тогда неизвестно,когда код выгрузки длл будет выполнен, так как по моему опыту длл может ждать выгрузки и десятки секунд. Возможно - минуты. 3) действительно лучший выход. причем легальный.
1) Не нужно запускаться в каждом, но нужно, чтобы некоторые первичные потоки начинали выполнение с моего кода. 2) То же заметил. 3) А как на счет записи в реестре? Накладно это?
А что на счет 1)? Может быть можно не SUSPENDED сделать, а еще как-то запаузить выполнение чужого потока так, чтобы на него можно было повесить хук?