Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > SetWindowsHookEx в Console


Автор: SiTox_ 26.9.2007, 11:58
Привет,подскажите пожалуйста

Код

                hKeyboardHook = SetWindowsHookEx(
                    WH_KEYBOARD_LL,
                    KeyboardHookProcedure,
                    Marshal.GetHINSTANCE(
                    Assembly.GetExecutingAssembly().GetModules()[0]),
                    0);

в Windows Forms Application всё работает норм делаю в Console Application 
он выдаёт 0. как вообще сделать не глобальный хук(что бы права админа не нужны были) на Console ? 

Автор: dumb 26.9.2007, 14:34
afaik, хуки и консоль - понятия несовместимые

Автор: tol05 26.9.2007, 19:24
не согласен. Лично хуки ставил и на консоль, и на десктоп... 
http://msdn.microsoft.com/msdnmag/issues/07/06/NETMatters/, но избавляет от преклонения перед winforms-ами  smile 
Главная мысль статьи такая: все, что имеет окно (и hWnd) - может принимать сообщения. А консоль его http://support.microsoft.com/kb/124103.

SiTox_, в гугле полно информации.

Автор: dumb 27.9.2007, 02:38
Цитата(tol05 @  26.9.2007,  20:24 Найти цитируемый пост)
все, что имеет окно (и hWnd) - может принимать сообщения
насколько я понял после беглого осмотра статьи, описываемые там методы используют создание обычного окна из консольного приложения, а не ту "болванку"(окно консоли), которую предоставляет csrss.

Цитата(tol05 @  26.9.2007,  20:24 Найти цитируемый пост)
А консоль его имеет.
цитата из указанной статьи:
Цитата(How To Obtain a Console Window Handle (HWND))
The resulting HWND is not guaranteed to be suitable for all window handle operations.


я, конечно, "перегнул палку" с полной несовместимостью консоли и хуков, но доля правды в этом есть - на консольные приложения обычные хуки не вешаются. а из консоли повесить глобальный хук - можно. в пределах консольного окошка точно работают только _LL хуки, и это объясняется тем, что они "отвязаны" от окон вообще.

код SiTox_'а ставит как-раз _LL хук и, по идее, должен работать. но тут я умываю руки, потому как .net вообще не знаю, и смысл этой "колбасы"(где должен быть GetModuleHandle(0)) до меня доходит с трудом... smile

Автор: tol05 27.9.2007, 09:07
Цитата(dumb @  27.9.2007,  02:38 Найти цитируемый пост)
насколько я понял после беглого осмотра статьи, описываемые там методы используют создание обычного окна из консольного приложения, а не ту "болванку"(окно консоли), которую предоставляет csrss.

статья не совсем по теме, я говорил. Просто в ней я нашел здравые рассуждения о различиях консольных и виндовс-приложений, рассуждения о том, так ли велики эти различия.

Цитата(dumb @  27.9.2007,  02:38 Найти цитируемый пост)
цитата из указанной статьи:
Цитата
(How To Obtain a Console Window Handle (HWND))
The resulting HWND is not guaranteed to be suitable for all window handle operations.

http://www.pinvoke.net/default.aspx/kernel32/GetConsoleWindow.html

Автор: SiTox_ 28.9.2007, 17:57
так я не понял почему мой код не работает ? :(

Автор: SiTox_ 29.9.2007, 20:04
как можно хук на HWND поставить?

Автор: dumb 30.9.2007, 05:06
Цитата(SiTox_ @  29.9.2007,  21:04 Найти цитируемый пост)
как можно хук на HWND поставить?
http://msdn2.microsoft.com/en-us/library/ms633522.aspx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)