Unconnected
23.10.2010 0:54
Привет всем.
Вопрос такой, есть программа с панелькой, на панели на событии OnDrop (не помню точно, ну когда перетаскивают на неё что-то) висит обработчик. Я беру Spy++, цепляюсь к главному окну программы, перетаскиваю на панель файл, лог Spy++ оживляется, и среди других сообщений я замечаю WM_NOTIFY.
WM_NOTIFY idCtrl: 313894 pnmh: 0018ECF4
Что-то типа того, в нескольких экземплярах. Ну idCtrl мне не нужен, а как посмотреть содержимое структуры, на которую указывает второй адрес? То есть, я хочу знать, что мне воткнуть в sendmessage, чтобы сделать "перетаскивание" без фактического перетаскивания. Да и не только Drug&Drop с этим сообщением связан..
А ты не через Spy, а прямо из своей программы смотри, что за сообщение приходит.
И смотри на PNMHDN(LP)^
Unconnected
23.10.2010 1:34
Дык, если бы она была моя
А по адресу тебя не пускают?
Кстати, по-моему, нотифи ничего не делает. Это просто сигнал, который приходит к главному окну.
Попробуй в лоб, через сообщения сэмулировать нажатие мышки, перетаскивание, отжатие.
Unconnected
23.10.2010 1:56
Цитата
А по адресу тебя не пускают?
А куда его вбить, чтобы посмотреть содержимое структуры?
Ну, сэмулирую.. а что это даст? Да и сильно муторно это по-моему, как бы там с координатами не пришлось заморачиваться..
Хз, может в артамни какое-нибудь. Я ковырянием чужих прог отродясь не занимался.
Цитата
То есть, я хочу знать, что мне воткнуть в sendmessage, чтобы сделать "перетаскивание" без фактического перетаскивания.
Ты можешь без "наворотов" объяснить, чего надо-то? "Перетаскивание без фактического перетаскивания" - очень оригинально. Запуск без фактического запуска не надо? Или работу на компьютере без наличия компьютера фактически?
Unconnected
23.10.2010 3:19
ну, этта... Юзер перетаскивает текстовик в эту программку и что-то происходит, а я хочу нажимать кнопку, и чтобы то же самое происходило, без фактического перетаскивания, по факту отправки sendmessage с параметрами, которые я и хочу узнать..))
Ну, эта... А что, у тебя Дельфи переклинило?
"Сабклассинг чужого окна прямым инжектом" забыл как делается? Перед вызовом "его" оконной процедуры все проходит через твою, и при наличии WM_NOTIFY ты легко и просто получаешь содержимое того участка памяти, на который указывает pnmh.
Unconnected
24.10.2010 0:22
Да, и правда, что-то глуплю.. Ну тогда в SetWindowHookEx надо писать не HCBT_CREATEWND, а WM_NOTIFY, да?
Не-не-не... Я сказал не о хуке, сабклассинг делается по-другому. Гугл в помощь. Кстати, с хуками - тоже идея. Только не пытайся поймать WM_NOTIFY, используя WH_GETMESSAGE. Работай через WH_CALLWNDPROC:
Цитата
WH_CALLWNDPROC
Windows вызывает этот хук при каждом вызове функции SendMessage. Фильтрующей функции передается код хука, показывающий, была ли произведена посылка сообщения из текущего потока, а также указатель на структуру с информацией о сообщении.
<...>
Этот хук использует значительное количество системных ресурсов, особенно, когда он установлен с системной областью видимости, поэтому используйте его только в целях отладки.
Тебе как раз для отладки.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.