![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| ApolloKiD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 7.6.2011 Где: Молдавия Репутация: нет Всего: нет |
Доброго времени суток всем!
Встала передо мной задача хукнуть WM_CLOSE. Есть программа которая при нажатии на крести [x] сразу закрываеться даже не спрашивает мол "Вы действительно хотите закрыть окно, Да или нет". Следственно исходников программы у меня тоже нету, есть только ДЛЛ которую я подключаю к этой программе. Хук я оуществил, при нажатии на крестик выскакивает сообщение "Вы действительно хотите закрыть окно, Да или нет", но окно закрываеться даже если нажимаю "нет". Может кто-то подсказать что я не так делаю, и что надо сделать чтобы при нажатии на кнопку "Нет" окно не закрывалось. Вот код:
Заранее спасибо! |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Видимо, сообщение WM_CLOSE всё равно доходит до оконной процедуры -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| ApolloKiD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 7.6.2011 Где: Молдавия Репутация: нет Всего: нет |
А можно как-то сделать чтобы не доходило при нажатии кнопки "нет" ?
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Думаю, поставить WH_GETMESSAGE хук, и при получении WM_CLOSE и отрицательного результата от MessageBox модифицировать msg так, что оно больше не было WM_CLOSE... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| ApolloKiD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 7.6.2011 Где: Молдавия Репутация: нет Всего: нет |
А можно примером показать ? =)
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
может проще так:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
А чем return 0; от return FALSE; отличается?
Полагаю, что оконная процедура уже обработала WM_CLOSE. Это сообщение отредактировал(а) feodorv - 10.5.2012, 09:59 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Тогда чем это поможет?
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
а при чем тут WH_CALLWNDPROCRET? Добавлено через 4 минуты и 56 секунд
в таком случае хук - мера лишняя, подойдет сабклассинг главного окна из DLL -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Прошу прощения, не туда посмотрел)))
То есть хук вызывается до оконной процедуры. Но даже так в доке написано:
То есть WM_CLOSE всё равно уходит в оконную процедуру. А вот на что влияет возвращаемое из хука значение - вопрос интересный. В любом случае попробовать стоит (хотя возвращаемое значение 0 - стандартное, и вряд ли на что-то влияет). Только я бы делать не стал... Добавлено через 9 минут Гм. Если есть HWND главного окна... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Что-то вроде такого:
Это сообщение отредактировал(а) feodorv - 10.5.2012, 11:13 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| ApolloKiD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 7.6.2011 Где: Молдавия Репутация: нет Всего: нет |
||||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Здесь нужен глобальный хук (не локальный) и знание хендла окна. Но если хендл известен, то лучше реализовать сабклассинг. Если хендл окна неизвестен, без хука не обойтись. Выше я писал о необходимости понять, на что влияет возвращаемое из хука значение. Соответственно, можно подобрать подходящий хук. Я подобрал:
Обо всех хуках неплохо написано здесь. Может, реализуете как-нибудь иначе (трудно сказать, все ли варианты закрытия окна охватывает приведённое решение). -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| ApolloKiD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 7.6.2011 Где: Молдавия Репутация: нет Всего: нет |
Спасибо большое, всё работает =)
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |