![]() |
|
|
![]()
|
|
| likenix |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
Всем привет!!!
Пишу программу под OС WinXP с использованием MSVS 9. На C/C++ с использованием MFC разумеется ;) Задача получить сообщений от мыши ( WM_MOUSEMOVE, WM_NCMOUSEMOVE, WM_LBUTTONDBLCLK, WM_LBUTTONDOWN, WM_LBUTTONUP) и и передать их нужной проге немного измененными. С первого взгляда показалось мне простой и даже кое что получилось. Сначало о том что получилось: Получилось перехватить сообщения от мыши и все вобщем то работает. Значит написал я библу вызываю
hWndServer - это хендл моей проги где я обрабатываю сообщения В программе обрабатывающей сообщения я передаю сообщения
Где MyhWnd - это хэндл окна приложения которому я передаю сообщения Но вот в чем проблема: при получении фокуса прога, которой я должен слать свои сообщения, обрабатывает сообщения и в мою библиотеку ничего не приходит. Думаю у программы есть свой обработчик сообщений. Думаю что есть какая - то цепочка обработчиков сообщений, в которую нужно вклинить свою библиотеку перед перехватчиком сообщений проги. Подскажите чего нибудь. |
||||||
|
|||||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Попробуй PostMessage заменить на SendMessage, вдруг поможет.
|
|||
|
||||
| likenix |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
Albor, ыыыыы
Хех не так все просто товарищ Кое что сейчас обдумываю вечерком расскажу. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Может, стоит попробовать ловить на нужнем уровне, т.е. не WH_GETMESSAGE, а WH_MOUSE?
-------------------- ... |
|||
|
||||
| likenix |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
Earnest, мне известно сообщения от мыши синхронные и ставятся в очередь на исполнение и WH_GETMESSAGE ловит все поставленные в очередь сообщения не только от мыши конечно. Но все равно не помогает ;)
|
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Может нужную обработку сделать внутри msghook, не отсылая сообщения кому-либо ещё. Во всяком случае, просто попробовать.
Это сообщение отредактировал(а) Albor - 21.4.2009, 06:57 |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
А когда прога не в фокусе все работает? А смысл? Если сообщение должна обрабатывать другая прога! Если дебагером попадает в нужные кейсы. -------------------- ????? ??, ??????? ?????. |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Я бы искал причину примерно так. Этим я бы избежал очереди сообщений. Во всяком случае, перехваченное сообщение на выходе msghook было бы уже изменено. А как система распоряжается сообщениями по PostMessage, чья процедура первой обработает это сообщение, наверное приоритет будет отдан процедуре активного окна, для которого это сообщение. |
|||
|
||||
| likenix |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
О приложении, которым хочу управлять - это прога использует DirectX9/Direct3D при получении фокуса захватывает курсор и не дает ему вылезти за пределы окна в общем как 3d гамеса
Нашел возможное решение моей проблемы Direct3D Hook Starter-Kit v1.0 но не знаю не производителя и не знаю платный или бесплатный продукт. Если кто юзал поделитесь опытом и если бесплатный поделитесь софтиной. Извините что с самого начала это не обозначил. Так как не придал этому большого значения. >А когда прога не в фокусе все работает? На Notepad и др приложениях тестировал - работает. |
|||
|
||||
| Andrey44 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
likenix не шлет сообщения всем окнам, а окну HWND которого он знает
Так что процедура активного другого окна тут не причем. -------------------- ????? ??, ??????? ?????. |
||||
|
|||||
| likenix |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
>Так что процедура активного другого окна тут не причем.
Ы это я так между делом упомянул, ясное дело что оно здесь не причем. Главное перехватить сообщения от мыши из проги, которая под Direct3d воркает!!! АХАХА Повторяю: "Это главное" Ну так кто -нибудь чего-нибудь знает про Direct3D Hook Starter-Kit v1.0 ? |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
Я может не правильно высказался, но перехваченное сообщение передаётся с помощью PostMessage, тот кто отправил сообщение не ждёт его обработки и продолжает свою работу, следовательно, если сообщение не обработано другой программой, оно в не изменённом виде пройдёт к своему прямому адресату. |
|||
|
||||
| likenix |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
Я Вас понял. ))) Просто чтобы вот это обсуждать.
нужно перехватить сообщение от мыши например например нажатие левой кнопки мыши, когда прога которой я должен передавать свои сообщения активна. Надо наверное пояснить: Есть прога ("а"(mfc only) + библиотека "б"(mfc only)) - мои программы Прога "а" работает с библиотекой "б" библиотекой "б" пытается перехватывать сообщения, но как видно не всегда удается ))) Если перехватывает проге "а" она их анализирует и посылает свои измененные сообщения проге "в" Есть еще мега програ"в" название которой я сказать не могу она работает с Direct3d И вот как только она становится активной глушит нафиг все сообщения от мыши и моя библа их не получает ((( Вот после долгих размышлений я погуглил и наткнулся на Direct3D Hook Starter-Kit v1.0. Но пока ХЗ где его взять и как оно работает. так что пока до PostMessage дело не дошло надо сначало мне перехватить сообщения ))) Сори если повторяюсь А уж потом проанализировав перехваченные сообщения слать свои при помощи метода PostMessage. Вот какая была идея. Это сообщение отредактировал(а) likenix - 21.4.2009, 12:06 |
||||
|
|||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 7 Всего: 9 |
||||
|
||||
| likenix |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
Не совсем. Во время запуска фокус у проги само собой "в" (хук не работает) переключаемся через ALT+TAB(прога "в"не дает мышке уйти за пределы своего окна так что переключаемся по ALT+TAB) на др прогу (хук работает). Хук перестает работать, как только прога "в" получает фокус. После передачи фокуса другой проге хук опять работает. Вот так вот. Так что мои подозоения что дело именно в Direc3d все больше оправдываются. Наверное ;) Это сообщение отредактировал(а) likenix - 21.4.2009, 13:42 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |