Выбор пунктов меню без посылки ими сообщ WM_COMMAND..

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

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

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

Стал прослушивать меню одной программы из Винды при помощи SPY++ и увидел, что некоторые элементы меню при их выборе и нажатии на них посылают окну сообщение WM_COMMAND. А некоторые - нет.

Как вторые выкручиваются?
В моем случае это точно не Registered, Unknown и WM_USER сообщения.
Может вообще без сообщений как-то?
char_ser
Сообщения: 17
Зарегистрирован: 29 сен 2004, 18:49
Откуда: МИФИ, Москва

Не происходит посылки сообщения WM_COMMAND при выборе пункта SetPassword... в консоли ни через всплывающее меню, ни из главного меню сверху.

Подробнее: При выборе какого-нибудь элемента меню (например, "Help\About Local Users and Groups") происходят следующие действия:
1) Водим мышью, выбирая тот или иной пункт меню - посылается сообщение WM_MENUSELECT
2) Нажимаем левой кнопкой мыши на выбранном пункте меню и посылаются следующие сообщения:
WM_UNINITMENUPOPUP
WM_MENUSELECT (menu was closed)
WM_EXITMENULOOP flsTrackPopupMenu:TRUE
WM_COMMAND wNotifyCode:0 (sent from menu) wID:13242 (item menu ID)

При выборе SetPassword происходят другие действия:
1) Водим мышью, выбирая тот или иной пункт меню - посылается сообщение WM_MENUSELECT
Никаких сообщений при выборе пункта меню нет!!!
char_ser
Сообщения: 17
Зарегистрирован: 29 сен 2004, 18:49
Откуда: МИФИ, Москва

Под консолью имелась ввиду MMC (Microsoft Management Console), когда хочешь поменять у пользователя пароль..
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Не знаю, как это реализовано на самом деле, но напрашивается вариант с хуками. Т.е. MMC сама ставит фильтр на WM_COMMAND для некоторых команд меню, чтобы потенциальный злоумышленник не сделал то же самое раньше :)
char_ser
Сообщения: 17
Зарегистрирован: 29 сен 2004, 18:49
Откуда: МИФИ, Москва

А вот и нет! Разобрался. Контекстные меню вызываются TrackPopupMenu(). TrackPopupMenu() во время своего выполнения не посылает сообщений WM_COMMAND окну и возвращает ID выбранного элемента меню (MSDN).
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Надо было с самого начала говорить, что меню контекстное! Сэкономил бы несколько дней рыскания в MSDN. Вот что значит не полная постановка вопроса :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
char_ser
Сообщения: 17
Зарегистрирован: 29 сен 2004, 18:49
Откуда: МИФИ, Москва

Есть меню сверху, ты водишь по нему мышкой и появляются выпадающие меню.
Так вот прикол в том, что вместо парочку выпадающих программа эмулирует при помощи контекстного меню :) ))))
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

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

Зато стал думать более гибко и теперь не доверяю мелкомягким "штучкам" :) Симулянты...
Ответить