PDA

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



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

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

char_ser
11.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
11.11.2004, 15:55
Под консолью имелась ввиду MMC (Microsoft Management Console), когда хочешь поменять у пользователя пароль..

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

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

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

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

Eugie
24.11.2004, 13:06
Гы, так все труды были напрасны? :)

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