GlobalHook в .Net (WH_KEYBOARD_LL)
От: Аноним  
Дата: 23.01.07 20:04
Оценка:
Вопрос:
Поддерживает ли .NET глобальные Hook?
Ставлю в SetWindowsHookEx(WH_KEYBOARD_LL,....) получаю ноль
Ставлю WH_KEYBOARD все нормально.
Может кто-то сталкивался? Нужно ловить и прерывать клавиатуру из чужих процессов.
Есть другие варианты?
Re: GlobalHook в .Net (WH_KEYBOARD_LL)
От: adontz Грузия http://adontz.wordpress.com/
Дата: 24.01.07 03:10
Оценка: +1 -1
Здравствуйте, Аноним, Вы писали:

Нельзя хуки и shell extensions писать на .Net (а ещё IE/WE band)
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: GlobalHook в .Net (WH_KEYBOARD_LL)
От: int13h Украина  
Дата: 24.01.07 04:00
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


A>Нельзя хуки и shell extensions писать на .Net (а ещё IE/WE band)

Почему? Прошу аргументировать.
Re[3]: GlobalHook в .Net (WH_KEYBOARD_LL)
От: Кос todosoft.org
Дата: 24.01.07 04:14
Оценка:
Здравствуйте, int13h, Вы писали:

A>>Нельзя хуки и shell extensions писать на .Net (а ещё IE/WE band)

I>Почему? Прошу аргументировать.

Однако, не раз эта тема обсуждалась уже. Сам пытался сделать такую вещь. Чтобы хукать глобально, нужно экспортировать функцию (ту, которая обрабатывает хук). Винда подгружает dll с хуком в память "активного" приложения. Пока винда не умеет подгружать в память произвольной программы .NET сборку с хуком.
Вобщем примено так.

Пытался я написать DLL которую можно было бы использовать в .NET приложении. Однако возникла проблема общения между экзмплярами этой DLL (в частности, той, которая загружена NET программой и той, которая подгружена в активную). Единственное (вобщем не удачное решение) было в разделяемой памяти помещать переменную, менять её и "слушать".
Другой вариант — отправка мессагов. Но тут уже привязка к хэндлу окна, и DLL становится не самостоятельной.

Если у кого, есть другие варианты — в студию.
Re[4]: GlobalHook в .Net (WH_KEYBOARD_LL)
От: MrLika  
Дата: 24.01.07 05:06
Оценка:
Кос>Если у кого, есть другие варианты — в студию.

ИМХО внедряешь DLL, а дальше любой из поддерживаемых вариантов межпроцессного взаимодействия между .NET приложением и внедренной DLL (какой больше подходит для конкретной ситуации)

http://support.microsoft.com/kb/95900
Re[5]: GlobalHook в .Net (WH_KEYBOARD_LL)
От: Кос todosoft.org
Дата: 24.01.07 06:14
Оценка:
Здравствуйте, MrLika, Вы писали:

Кос>>Если у кого, есть другие варианты — в студию.


ML>ИМХО внедряешь DLL, а дальше любой из поддерживаемых вариантов межпроцессного взаимодействия между .NET приложением и внедренной DLL (какой больше подходит для конкретной ситуации)

Ну во-первых, изначально то и не хотелось приявызваться к .NET. Dll должна была быть универсальной, но это не главное.
Во-вторых, можно поподробнее про взаимодействие?
В-третьих. Как отследить эту саму DLL (её экзэмпляр), с которой в данный момент надо взаимодейтсвовать. При этом инициатором взаимодействия является DLL, а не .NET программа. Т.е. dll должна дёргать делегат.


ML>http://support.microsoft.com/kb/95900
Re[6]: GlobalHook в .Net (WH_KEYBOARD_LL)
От: Аноним  
Дата: 24.01.07 10:40
Оценка:
Т.е. вариантов нет, или все таки есть?
Очень не хочеться писать все на С++, так как там еще много XML На .net все таки удобнее.
Re: GlobalHook в .Net (WH_KEYBOARD_LL)
От: Аноним  
Дата: 24.01.07 10:55
Оценка:
Вот нашел, кому интересно. Вроде с DLL на C++, но само приложение на .NET
http://www.codeproject.com/csharp/GlobalSystemHook.asp
Re[2]: GlobalHook в .Net (WH_KEYBOARD_LL)
От: Morpheus_  
Дата: 24.01.07 11:03
Оценка:
Здравствуйте, adontz, Вы писали:

A>Нельзя хуки и shell extensions писать на .Net (а ещё IE/WE band)


еще как можно, WH_KEYBOARD_LL на C# без особых проблем, dll не нужны
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: GlobalHook в .Net (WH_KEYBOARD_LL)
От: Morpheus_  
Дата: 24.01.07 11:06
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Вопрос:

А>Поддерживает ли .NET глобальные Hook?
А>Ставлю в SetWindowsHookEx(WH_KEYBOARD_LL,....) получаю ноль
А>Ставлю WH_KEYBOARD все нормально.
А>Может кто-то сталкивался? Нужно ловить и прерывать клавиатуру из чужих процессов.
А>Есть другие варианты?

поддерживает, здесь давали пример
Автор: Стример
Дата: 16.11.06
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: GlobalHook в .Net (WH_KEYBOARD_LL)
От: Кос todosoft.org
Дата: 24.01.07 11:31
Оценка:
Здравствуйте, Morpheus_, Вы писали:

M_>поддерживает, здесь давали пример
Автор: Стример
Дата: 16.11.06

А вот это действительно работает. В ту бытность когда я с этим баловался, 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_>поддерживает, здесь давали пример
Автор: Стример
Дата: 16.11.06


Действительно, все работаетб без проблем!!! Спасибо
Re[3]: GlobalHook в .Net (WH_KEYBOARD_LL)
От: adontz Грузия http://adontz.wordpress.com/
Дата: 24.01.07 14:58
Оценка:
Здравствуйте, int13h, Вы писали:

A>>Нельзя хуки и shell extensions писать на .Net (а ещё IE/WE band)

I>Почему? Прошу аргументировать.

Потому что в процесс может быть загружена только одна версия CRL. Представь себе, что твой хук написан на 2.0, и ты перехватываешь события в приложении на .Net 1.1
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: GlobalHook в .Net (WH_KEYBOARD_LL)
От: AlexZu Россия  
Дата: 24.01.07 22:02
Оценка:
Здравствуйте, adontz, Вы писали:

A>Потому что в процесс может быть загружена только одна версия CRL. Представь себе, что твой хук написан на 2.0, и ты перехватываешь события в приложении на .Net 1.1

Вывод: нужно писать хуки и shell extensions (и прочие unmanaged плагины) на .NEt 1.1 (.NET 1.0 в расчет не берем)
Re[5]: GlobalHook в .Net (WH_KEYBOARD_LL)
От: adontz Грузия http://adontz.wordpress.com/
Дата: 24.01.07 22:25
Оценка:
Здравствуйте, AlexZu, Вы писали:

AZ>Вывод: нужно писать хуки и shell extensions (и прочие unmanaged плагины) на .NEt 1.1 (.NET 1.0 в расчет не

берем)

Неправильный вывод. Между 1.1 и 2.0 нет совместимости в обе стороны.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[6]: GlobalHook в .Net (WH_KEYBOARD_LL)
От: AlexZu Россия  
Дата: 24.01.07 22:51
Оценка: -1
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.