Страница 1 из 1

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

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

Как вторые выкручиваются?
В моем случае это точно не Registered, Unknown и WM_USER сообщения.
Может вообще без сообщений как-то?

Добавлено: 11 ноя 2004, 15:53
char_ser
Не происходит посылки сообщения 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
Никаких сообщений при выборе пункта меню нет!!!

Добавлено: 11 ноя 2004, 15:55
char_ser
Под консолью имелась ввиду MMC (Microsoft Management Console), когда хочешь поменять у пользователя пароль..

Добавлено: 15 ноя 2004, 12:30
Eugie
Не знаю, как это реализовано на самом деле, но напрашивается вариант с хуками. Т.е. MMC сама ставит фильтр на WM_COMMAND для некоторых команд меню, чтобы потенциальный злоумышленник не сделал то же самое раньше :)

Добавлено: 22 ноя 2004, 18:45
char_ser
А вот и нет! Разобрался. Контекстные меню вызываются TrackPopupMenu(). TrackPopupMenu() во время своего выполнения не посылает сообщений WM_COMMAND окну и возвращает ID выбранного элемента меню (MSDN).

Добавлено: 22 ноя 2004, 21:30
Romeo
Надо было с самого начала говорить, что меню контекстное! Сэкономил бы несколько дней рыскания в MSDN. Вот что значит не полная постановка вопроса :)

Добавлено: 23 ноя 2004, 11:25
char_ser
Есть меню сверху, ты водишь по нему мышкой и появляются выпадающие меню.
Так вот прикол в том, что вместо парочку выпадающих программа эмулирует при помощи контекстного меню :) ))))

Добавлено: 24 ноя 2004, 13:06
Eugie
Гы, так все труды были напрасны? :)

Добавлено: 24 ноя 2004, 16:53
char_ser
Зато стал думать более гибко и теперь не доверяю мелкомягким "штучкам" :) Симулянты...