| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > SetWindowsHookEx |
| Автор: User008 28.10.2010, 08:24 | ||
Ожидал, что childframe будет перехватывать сообщения мыши всех представлений и вызывать MouseProc. Но ничего не перехватывается. Что сделано неправильно? |
| Автор: icecrashldr 28.10.2010, 10:36 | ||
Документация не прочитал, не в том месте вопрос задал, не прогугглился ? Этого мало? http://msdn.microsoft.com/en-us/library/ms644990%28VS.85%29.aspx |
| Автор: icecrashldr 29.10.2010, 11:49 | ||
| User008, MSDN
А вы пытаетесь передать туды свой HANDLE exe файла... Ладно опиши(есть не много времени): - При установки hook's вы должны иметь привелигии администратора. Одним из главных вопросов, на который нужно ответить, это в каком контексте будет выполнен callback который передается в SetWindowsHookEx. Он будет работать в контексте процесса, который вызвал событие, которое перелавливает SetWindowsHookEx. Это связано с несколькими проблемами: - Планировка задач(процессов, потоком) , так как передать сообщения в процесс который установил SetWindowsHookEx будет проблемотично .. - Память, окружения - придется делать сериализоватор\десириализатор .. - Привелигии - Если процесс генерирует сообщения с понижиными привелигиями то он будет отправлять сообщения процессу с повышиными привилегиями , что нарушит защиту .. Вам нужно создать динамическую библиотеку (DLL) которая должна содержать это callback. Ссылки на примеры http://stackoverflow.com/questions/454477/global-hook-setwindowshookex http://stackoverflow.com/questions/820804/how-to-hook-external-process-with-setwindowshookex-and-wh-keyboard http://www.codeproject.com/KB/system/hooksys.aspx http://www.codeproject.com/KB/DLL/keyboardhook.aspx |
| Автор: User008 29.10.2010, 15:09 | ||
Всё оказалось намного проще, третий параметр должен быть 0, а четвёртый GetCurrentThreadID(). DLL и привилегии не нужны. Добавлено @ 15:22 Вообще зря я SetWindowsHookEx взял. Оказывается мне нужен был SetWindowsHook. |
| Автор: icecrashldr 29.10.2010, 16:10 |
| User008, Это на Windows XP привилегии не нужны .. А Где вы нашли SetWindowHook? http://msdn.microsoft.com/en-us/library/ff468842%28v=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 |
| Автор: User008 29.10.2010, 18:45 |
Он существует, хотя пишут, что он устарел. |