![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
inoplanetanin |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
Помогите азобраться, не выводится переменная в DLL
Вот исходник DLLки которая не работает: library hookDLL; В програме пишу ... |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Почему именно хук WH_CALLWNDPROC используешь для отлова одного сообщения, а не WH_GETMESSAGE (насколько я помню, на social.msdn.microsoft.com было несколько тем с жалобами на то, что из WH_CALLWNDPROC сообщение перерисовки либо не ловится вообще, либо ловится крайне нестабильно)?
|
inoplanetanin |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
Windows calls a WH_CALLWNDPROC hook procedure before passing the message to the receiving window procedure.
Какя понял отлавливает событие после отработки сообщения, а WH_GETMESSAGE до. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Какя понял отлавливает событие после отработки сообщения Ну вот сам же написал, чтоЦитата Windows calls a WH_CALLWNDPROC hook procedure before passing the message to the receiving window procedure. , а теперь говоришь, что после... Сначала сообщение приходит в хук, потом - в оконную процедуру. Именно поэтому с помощью WH_CALLWNDPROC можно отменить обработку сообщения. Если б было наоборот - то обработку отменить было бы невозможно.Тебе чего надо вообще? Чтоб по КАЖДОМУ событию WM_PAINT выскакивал твой MessageBox? |
inoplanetanin |
![]()
Сообщение
#5
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
inoplanetanin |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
Проблема в том что код у dll общий для всех процессов, а данные нет.
При наступлении события процедура fff невидит изменения проишедшие с переменной S в процедуре SendString, хотя видит те значения которые были при загрузки DLL Сообщение отредактировано: inoplanetanin - 10.11.2010 9:13 |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата Проблема в том что код у dll общий для всех процессов, а данные нет. Поэтому придумали Shared Memory ( пример - здесь: Хук на HCBT_CREATEWND ) |
inoplanetanin |
![]()
Сообщение
#8
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
Если не трудно можешь дополнить код моей dll? Там же как я понимаю немного кода. |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Я сейчас не под Windows, как будет возможность - сделаю и покажу (очень не хочется выкладывать неработающее решение; такие вещи, как хуки, нужно проверять)
|
inoplanetanin |
![]()
Сообщение
#10
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Нет, вот как раз ждать ничего не надо. Ты для начала все-же задачу уточни.
Есть у меня приложение, которое устанавливает ловушку. Это ясно. Есть второе приложение (создающее окно с определенным заголовком), которое будет запущено после установки ловушки. Это тоже понятно. А вот дальше все НЕпонятно. Запустил я второе приложение. И что должно произойти? В какой момент? Только вот не надо говорить "чтобы по событию в конкретном окне выскакивал мессадж". Ты представляешь, сколько событий получает окно? Смотри: ловишь ты WM_PAINT, например, куда же проще, казалось бы. Ага. Щаззз. Поймал WM_PAINT -> должно вылететь сообщение в виде окошка с текстом. Но это ж пошлет очередной WM_PAINT твоему окну (прямо в момент обработки хука, заметь), а тут и до зависания системы - рукой подать. Вылетит у тебя эксплорер раз 15, потом начнешь думать над постановкой задачи? Или ты надеешься, что я за тебя буду ловить глюки, а ты будешь ждать, пока отлаженное приложение появится здесь? Не будет этого. Уточняй, В КАКОЙ МОМЕНТ должно ловиться окно, и почему это твое приложение должно посылать строку в DLL, а не может просто напросто запомнить строку прямо в себе, при открытии нужного тебе окна хук тихо-мирно высылает установившему его приложению заранее обговоренное сообщение (см. выше по ссылке), а уж твое приложение, когда получает это сообщение, вообще что хочет то и делает. Думай, уточняй... Ну, или лови перезагрузки эксплорера сам, я не мазохист, чтоб делать себе же проблемы. Задачу "в лоб/напролом" в том виде как ты ее поставил, я решать не буду. Твоя задача решается совершенно по другому, без необходимости во всех этих наворотах. Возможно, у тебя есть какая-то другая задача, но тогда тебе сюда нужно: Сага о X, Y и Z... |
inoplanetanin |
![]()
Сообщение
#12
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
...Уточняй, В КАКОЙ МОМЕНТ должно ловиться окно, и почему это твое приложение должно посылать строку в DLL, а не может просто напросто запомнить строку прямо в себе, при открытии нужного тебе окна хук тихо-мирно высылает установившему его приложению заранее обговоренное сообщение (см. выше по ссылке), а уж твое приложение, когда получает это сообщение, вообще что хочет то и делает. ... Так и сделал но пришлось работать с файлами, а это значительно замедлило всю работу.(при отправке сообщения из программы сохраняю переменную в файле, затем по событию работаю с этим файлом в dll-ке, а после отправлю обратно в программу запрос на повторную операцию). С переменной было бы гораздо проще. Спасибо за интересную статью о Сага о X, Y и Z... |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 14:56 |