Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2010, 21:31   #1
TGrey[WoLf]
Пользователь
 
Регистрация: 21.06.2010
Сообщений: 27
По умолчанию Одна оконная процедура

Здравствуйте, сижу смотрю через Спай++ на Shell_TrayWnd в ХР. Ничего нормального найти не могу, хочу перехватить сообщения от TrayNotifyWnd, но ничего не хукается. Обратил внимание, что TrayNotifyWnd и Shell_TrayWnd имеют одну и туже оконную процедуру, значит по сути, что приходит в Shell_TrayWnd, то и обрабатывается в TrayNotifyWnd? Но посмотрев логи сообщений в обоих случаях приходят совершенно разные сообщения. Как с этим бороться и добраться до сообщений TrayNotifyWnd?
Спасибо
TGrey[WoLf] вне форума Ответить с цитированием
Старый 21.06.2010, 22:03   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

можно через внедрение своего обработчика в процесс и переопределение оконной функции нужного окна, чуть ниже(в этом разделе) я писал об этом подробно
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.06.2010, 22:17   #3
TGrey[WoLf]
Пользователь
 
Регистрация: 21.06.2010
Сообщений: 27
По умолчанию

Имеете ввиду сабкласировать? При нужном мне сообщении делать, то что мне нужно, а иначе вызывать стандартную?

Все это я начал только из-за желания расширить системные часы=) (кстати если есть инфа. как это сделать, буду рад услышать)
Так вот, начав попытки, я заметил, что мой глобальный хук не ловит никаких сообщений от чилдов ШеллТрея, потом заметил, что у них еще к тому же один обработчик окна. Вот такая история. Так что, повторюсь, если есть инфа, буду рад.
TGrey[WoLf] вне форума Ответить с цитированием
Старый 21.06.2010, 22:33   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

зачем класс менять?
можно сменить обработчик лишь нужного окна.

часы этож TrayClockWClass
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.06.2010, 22:49   #5
TGrey[WoLf]
Пользователь
 
Регистрация: 21.06.2010
Сообщений: 27
По умолчанию

Ну да, я прошиб я и имел ввиду SetWindowLong.
Я знаю, где часы=) Дело в том, что как я написал, то сообщения не ловятся ни от одного от чилдов Трея. Потому я решил для начала попробовать расширить TrayNotifyWnd. А если сразу на прямую расширять часы, то TrayNotifyWnd не расширяется соответственно новому размеру часов, все получается не красиво, налаживается друг на друга. Я подумал раз они имеют одну оконную процедуру, то и работают взаимосвязано. То есть я через Спай++ просмотрел сообщения для этих окон, то при добавлении иконок в Notification Area, шлется Ресайз и т.п. функции к TrayNotifyWnd и так далее. А за часы я прочитал, что надо ловить WM_USER+100 для изменение размеров. В общем сейчас попробую напрямую заменить для часов процедуру, а потом если криво будет, то буду с самого верха пытаться вызвать ресайзы для каждого парента.
TGrey[WoLf] вне форума Ответить с цитированием
Старый 21.06.2010, 22:52   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Я подумал раз они имеют одну оконную процедуру, то и работают взаимосвязано.
глупость подумали.
в программах на АПИ все BUTTON EDIT и прочее одного класса, имеет один обработчик.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.06.2010, 00:30   #7
TGrey[WoLf]
Пользователь
 
Регистрация: 21.06.2010
Сообщений: 27
По умолчанию

Не ну кнопки, Едиты и т.п. Они как бы одинаковы там, как бы делать разные процедуры и нет смысла. А тут же речь идет об окне и мне кажется, что оно не наследник чего-либо, обычное окно, смысл ему делать одинаковые процедуры?! Я не утверждаю обратное, просто я не знаю, как оно там, потому и спрашиваю, расширяю горизонты=)
TGrey[WoLf] вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одна процедура для всех Edit(ов) SoftKoc Общие вопросы Delphi 7 23.01.2010 13:44
оконная процедура и вложенный switch Пепел Феникса Общие вопросы C/C++ 3 09.09.2009 18:56
Процедура в процедура в C++ Builder Ecosasha C++ Builder 2 06.06.2009 17:17
Оконная процедура HunterMan Win Api 5 04.06.2008 12:10