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

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

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

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

11 ноя 2004, 14:24

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

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

11 ноя 2004, 15:53

Не происходит посылки сообщения 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
Откуда: МИФИ, Москва

11 ноя 2004, 15:55

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

15 ноя 2004, 12:30

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

22 ноя 2004, 18:45

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

22 ноя 2004, 21:30

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

23 ноя 2004, 11:25

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

24 ноя 2004, 13:06

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

24 ноя 2004, 16:53

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