Вопрос:
Поддерживает ли .NET глобальные Hook?
Ставлю в SetWindowsHookEx(WH_KEYBOARD_LL,....) получаю ноль
Ставлю WH_KEYBOARD все нормально.
Может кто-то сталкивался? Нужно ловить и прерывать клавиатуру из чужих процессов.
Есть другие варианты?
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
A>Нельзя хуки и shell extensions писать на .Net (а ещё IE/WE band)
Почему? Прошу аргументировать.
Здравствуйте, int13h, Вы писали:
A>>Нельзя хуки и shell extensions писать на .Net (а ещё IE/WE band) I>Почему? Прошу аргументировать.
Однако, не раз эта тема обсуждалась уже. Сам пытался сделать такую вещь. Чтобы хукать глобально, нужно экспортировать функцию (ту, которая обрабатывает хук). Винда подгружает dll с хуком в память "активного" приложения. Пока винда не умеет подгружать в память произвольной программы .NET сборку с хуком.
Вобщем примено так.
Пытался я написать DLL которую можно было бы использовать в .NET приложении. Однако возникла проблема общения между экзмплярами этой DLL (в частности, той, которая загружена NET программой и той, которая подгружена в активную). Единственное (вобщем не удачное решение) было в разделяемой памяти помещать переменную, менять её и "слушать".
Другой вариант — отправка мессагов. Но тут уже привязка к хэндлу окна, и DLL становится не самостоятельной.
ИМХО внедряешь DLL, а дальше любой из поддерживаемых вариантов межпроцессного взаимодействия между .NET приложением и внедренной DLL (какой больше подходит для конкретной ситуации)
Здравствуйте, MrLika, Вы писали:
Кос>>Если у кого, есть другие варианты — в студию.
ML>ИМХО внедряешь DLL, а дальше любой из поддерживаемых вариантов межпроцессного взаимодействия между .NET приложением и внедренной DLL (какой больше подходит для конкретной ситуации)
Ну во-первых, изначально то и не хотелось приявызваться к .NET. Dll должна была быть универсальной, но это не главное.
Во-вторых, можно поподробнее про взаимодействие?
В-третьих. Как отследить эту саму DLL (её экзэмпляр), с которой в данный момент надо взаимодейтсвовать. При этом инициатором взаимодействия является DLL, а не .NET программа. Т.е. dll должна дёргать делегат.
Здравствуйте, <Аноним>, Вы писали:
А>Вопрос: А>Поддерживает ли .NET глобальные Hook? А>Ставлю в SetWindowsHookEx(WH_KEYBOARD_LL,....) получаю ноль А>Ставлю WH_KEYBOARD все нормально. А>Может кто-то сталкивался? Нужно ловить и прерывать клавиатуру из чужих процессов. А>Есть другие варианты?
А вот это действительно работает. В ту бытность когда я с этим баловался, WH_KEYBOARD_LL вообще перегрузил комп, и я побоялся дальше с ним экспериментировать. Видимо что то не так в в функции хука сделал. Занялся WH_KEYBOARD. Желаемого результата не достиг, но узнал много нового.
Re[2]: GlobalHook в .Net (WH_KEYBOARD_LL)
От:
Аноним
Дата:
24.01.07 12:16
Оценка:
Здравствуйте, Morpheus_, Вы писали:
M_>Здравствуйте, <Аноним>, Вы писали:
А>>Вопрос: А>>Поддерживает ли .NET глобальные Hook? А>>Ставлю в SetWindowsHookEx(WH_KEYBOARD_LL,....) получаю ноль А>>Ставлю WH_KEYBOARD все нормально. А>>Может кто-то сталкивался? Нужно ловить и прерывать клавиатуру из чужих процессов. А>>Есть другие варианты?
M_>поддерживает, здесь давали пример
Здравствуйте, int13h, Вы писали:
A>>Нельзя хуки и shell extensions писать на .Net (а ещё IE/WE band) I>Почему? Прошу аргументировать.
Потому что в процесс может быть загружена только одна версия CRL. Представь себе, что твой хук написан на 2.0, и ты перехватываешь события в приложении на .Net 1.1
Здравствуйте, adontz, Вы писали:
A>Потому что в процесс может быть загружена только одна версия CRL. Представь себе, что твой хук написан на 2.0, и ты перехватываешь события в приложении на .Net 1.1
Вывод: нужно писать хуки и shell extensions (и прочие unmanaged плагины) на .NEt 1.1 (.NET 1.0 в расчет не берем)
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, AlexZu, Вы писали:
AZ>>Вывод: нужно писать хуки и shell extensions (и прочие unmanaged плагины) на .NEt 1.1 (.NET 1.0 в расчет не A>берем)
A>Неправильный вывод. Между 1.1 и 2.0 нет совместимости в обе стороны.
А, ну да, пишем на .NET 1.1 с учетом Breaking Changes in .NET Framework 2.0