Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SetWindowsHookEx 
V
    Опции темы
User008
Дата 28.10.2010, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 9.9.2009

Репутация: нет
Всего: 1



Код


LRESULT CALLBACK MouseProc(
  __in  int nCode,
  __in  WPARAM wParam,
  __in  LPARAM lParam
)
{
    ::MessageBox(0,0,0,0);
    return 0;
}

BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
//...
    SetWindowsHookEx(WH_MOUSE, MouseProc, GetModuleHandle(0), 0);
}

Ожидал, что childframe будет перехватывать сообщения мыши всех представлений и вызывать MouseProc. Но ничего не перехватывается. Что сделано неправильно?
PM MAIL   Вверх
icecrashldr
Дата 28.10.2010, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 5.7.2010

Репутация: нет
Всего: нет



Цитата

Что сделано неправильно? 

Документация не прочитал, не в том месте вопрос задал, не прогугглился ? Этого мало?

http://msdn.microsoft.com/en-us/library/ms...28VS.85%29.aspx
PM MAIL WWW   Вверх
User008
Дата 28.10.2010, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 9.9.2009

Репутация: нет
Всего: 1



Цитата(icecrashldr @  28.10.2010,  10:36 Найти цитируемый пост)
Документация не прочитал, не в том месте вопрос задал, не прогугглился ? Этого мало?http://msdn.microsoft.com/en-us/library/ms...28VS.85%29.aspx

Тогда прошу показать, где в мсдн или гугле расположен ответ на мой вопрос, я не нашёл.

Это сообщение отредактировал(а) User008 - 28.10.2010, 21:53
PM MAIL   Вверх
icecrashldr
Дата 29.10.2010, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 5.7.2010

Репутация: нет
Всего: нет



User008, 

MSDN
Цитата

A handle to the DLL containing the hook procedure pointed to by the lpfn parameter. The hMod parameter must be set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure is within the code associated with the current process. 

Remarks

SetWindowsHookEx can be used to inject a DLL into another process. A 32-bit DLL cannot be injected into a 64-bit process, and a 64-bit DLL cannot be injected into a 32-bit process. If an application requires the use of hooks in other processes, it is required that a 32-bit application call SetWindowsHookEx to inject a 32-bit DLL into 32-bit processes, and a 64-bit application call SetWindowsHookEx to inject a 64-bit DLL into 64-bit processes. The 32-bit and 64-bit DLLs must have different names. 

А вы пытаетесь передать туды свой HANDLE exe файла... 

Ладно опиши(есть не много времени):
  - При установки hook's вы должны иметь привелигии администратора.
  Одним из главных вопросов, на который нужно ответить, это в каком контексте будет выполнен callback который передается в SetWindowsHookEx.
Он будет работать в контексте процесса, который вызвал событие, которое перелавливает SetWindowsHookEx. Это связано с несколькими проблемами:
  - Планировка задач(процессов, потоком) , так как передать сообщения в процесс который установил SetWindowsHookEx будет проблемотично .. 
  - Память, окружения - придется делать сериализоватор\десириализатор ..
  - Привелигии - Если процесс генерирует сообщения с понижиными привелигиями то он будет отправлять сообщения процессу с повышиными привилегиями , что нарушит защиту .. 
  
Вам нужно создать динамическую библиотеку (DLL) которая должна содержать это callback. 

Ссылки на примеры
http://stackoverflow.com/questions/454477/...etwindowshookex
http://stackoverflow.com/questions/820804/...and-wh-keyboard
http://www.codeproject.com/KB/system/hooksys.aspx
http://www.codeproject.com/KB/DLL/keyboardhook.aspx
PM MAIL WWW   Вверх
User008
Дата 29.10.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 9.9.2009

Репутация: нет
Всего: 1



Цитата(icecrashldr @  29.10.2010,  11:49 Найти цитируемый пост)
Ладно опиши(есть не много времени):  - При установки hook's вы должны иметь привелигии администратора.  Одним из главных вопросов, на который нужно ответить, это в каком контексте будет выполнен callback который передается в SetWindowsHookEx.Он будет работать в контексте процесса, который вызвал событие, которое перелавливает SetWindowsHookEx. Это связано с несколькими проблемами:  - Планировка задач(процессов, потоком) , так как передать сообщения в процесс который установил SetWindowsHookEx будет проблемотично ..   - Память, окружения - придется делать сериализоватор\десириализатор ..  - Привелигии - Если процесс генерирует сообщения с понижиными привелигиями то он будет отправлять сообщения процессу с повышиными привилегиями , что нарушит защиту ..   Вам нужно создать динамическую библиотеку (DLL) которая должна содержать это callback. 

Всё оказалось намного проще, третий параметр должен быть 0, а четвёртый GetCurrentThreadID(). DLL и привилегии не нужны.

Добавлено @ 15:22
Вообще зря я SetWindowsHookEx взял. Оказывается мне нужен был SetWindowsHook.

Это сообщение отредактировал(а) User008 - 29.10.2010, 15:22
PM MAIL   Вверх
icecrashldr
Дата 29.10.2010, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 5.7.2010

Репутация: нет
Всего: нет



User008, Это на Windows XP привилегии не нужны .. 

А Где вы нашли SetWindowHook?
http://msdn.microsoft.com/en-us/library/ff...v=VS.85%29.aspx
Это все функты от Microsoft Hook Functions
    * CallMsgFilter
    * CallNextHookEx
    * CallWndProc
    * CallWndRetProc
    * CBTProc
    * DebugProc
    * ForegroundIdleProc
    * GetMsgProc
    * JournalPlaybackProc
    * JournalRecordProc
    * KeyboardProc
    * LowLevelKeyboardProc
    * LowLevelMouseProc
    * MessageProc
    * MouseProc
    * SetWindowsHookEx
    * ShellProc
    * SysMsgProc
    * UnhookWindowsHookEx
PM MAIL WWW   Вверх
User008
Дата 29.10.2010, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 9.9.2009

Репутация: нет
Всего: 1



Цитата(icecrashldr @  29.10.2010,  16:10 Найти цитируемый пост)
А Где вы нашли SetWindowHook?

Он существует, хотя пишут, что он устарел.


Это сообщение отредактировал(а) User008 - 29.10.2010, 18:55
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.4951 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.