Заменить пункт меню на свой через HANDLE

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

char_ser
Сообщения: 17
Зарегистрирован: 29 сен 2004, 18:49
Откуда: МИФИ, Москва

22 ноя 2004, 14:14

ОГРОМНОЕ СПАСИБО!!!
char_ser
Сообщения: 17
Зарегистрирован: 29 сен 2004, 18:49
Откуда: МИФИ, Москва

22 ноя 2004, 15:33

А что делать в случае с контекстным меню? Ведь оно не посылает сообщения WM_COMMAND...
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

24 ноя 2004, 13:45

Видимо, вопрос естественным образом закрылся, но на всякий случай: 1) если контекстное меню системное (system menu, отображается при клике в левом вернем углу заголовка), оно посылает сообщения WM_SYSCOMMAND, их тоже можно ловить; 2) если оно пользоватьское - все зависит от способа вызова - указан или нет флажок TPM_NONOTIFY в TrackPopupMenu (в последнем случае, действительно, ловить нечего)
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

24 ноя 2004, 14:54

В последнем случае нужно ловить WM_COMMAND, который отсылает сэмулированный айтем главного меню. Ведь если разработчики сэмулировали выпадение подменю, то соответствующий айтем уже не popup, а обычный, как следствие он шлёт WM_COMMAND. Именно в command xэндлере этого айтема происходит вызов TrackPopupMenu.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

24 ноя 2004, 16:17

Речь об обычном контекстном меню, в эмулированном, ессно, все может быть
char_ser
Сообщения: 17
Зарегистрирован: 29 сен 2004, 18:49
Откуда: МИФИ, Москва

24 ноя 2004, 16:33

В общем, сделаю наверное так:
Есть такая фигня "Detours": http://research.microsoft.com/sn/detours/
Она позволяет перехватывать любые Win32 API функции, она специально для этого и разработана. (COOL)
Я перехватываю TrackPopupMenu(), в параметре hMenu у нее убиваю нужный мне пункт и передаю управление оригинальной TrackPopupMenu() :)
Ответить