Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Сообщение WM_NOTIFY

Автор: Unconnected 23.10.2010 0:54

Привет всем.

Вопрос такой, есть программа с панелькой, на панели на событии OnDrop (не помню точно, ну когда перетаскивают на неё что-то) висит обработчик. Я беру Spy++, цепляюсь к главному окну программы, перетаскиваю на панель файл, лог Spy++ оживляется, и среди других сообщений я замечаю WM_NOTIFY.

WM_NOTIFY idCtrl: 313894 pnmh: 0018ECF4

Что-то типа того, в нескольких экземплярах. Ну idCtrl мне не нужен, а как посмотреть содержимое структуры, на которую указывает второй адрес? То есть, я хочу знать, что мне воткнуть в sendmessage, чтобы сделать "перетаскивание" без фактического перетаскивания. Да и не только Drug&Drop с этим сообщением связан..

Автор: Гость 23.10.2010 1:25

А ты не через Spy, а прямо из своей программы смотри, что за сообщение приходит.
И смотри на PNMHDN(LP)^

Автор: Unconnected 23.10.2010 1:34

Дык, если бы она была моя smile.gif

Автор: Гость 23.10.2010 1:43

А по адресу тебя не пускают?
Кстати, по-моему, нотифи ничего не делает. Это просто сигнал, который приходит к главному окну.
Попробуй в лоб, через сообщения сэмулировать нажатие мышки, перетаскивание, отжатие.

Автор: Unconnected 23.10.2010 1:56

Цитата
А по адресу тебя не пускают?


А куда его вбить, чтобы посмотреть содержимое структуры?

Ну, сэмулирую.. а что это даст? Да и сильно муторно это по-моему, как бы там с координатами не пришлось заморачиваться..

Автор: Гость 23.10.2010 2:16

Хз, может в артамни какое-нибудь. Я ковырянием чужих прог отродясь не занимался.

Автор: volvo 23.10.2010 2:55

Цитата
То есть, я хочу знать, что мне воткнуть в sendmessage, чтобы сделать "перетаскивание" без фактического перетаскивания.
Ты можешь без "наворотов" объяснить, чего надо-то? "Перетаскивание без фактического перетаскивания" - очень оригинально. Запуск без фактического запуска не надо? Или работу на компьютере без наличия компьютера фактически?

Автор: Unconnected 23.10.2010 3:19

ну, этта... Юзер перетаскивает текстовик в эту программку и что-то происходит, а я хочу нажимать кнопку, и чтобы то же самое происходило, без фактического перетаскивания, по факту отправки sendmessage с параметрами, которые я и хочу узнать..))

Автор: volvo 23.10.2010 3:28

Ну, эта... А что, у тебя Дельфи переклинило? smile.gif "Сабклассинг чужого окна прямым инжектом" забыл как делается? Перед вызовом "его" оконной процедуры все проходит через твою, и при наличии WM_NOTIFY ты легко и просто получаешь содержимое того участка памяти, на который указывает pnmh.

Автор: Unconnected 24.10.2010 0:22

Да, и правда, что-то глуплю.. Ну тогда в SetWindowHookEx надо писать не HCBT_CREATEWND, а WM_NOTIFY, да?

Автор: volvo 24.10.2010 0:42

Не-не-не... Я сказал не о хуке, сабклассинг делается по-другому. Гугл в помощь. Кстати, с хуками - тоже идея. Только не пытайся поймать WM_NOTIFY, используя WH_GETMESSAGE. Работай через WH_CALLWNDPROC:

Цитата
WH_CALLWNDPROC
Windows вызывает этот хук при каждом вызове функции SendMessage. Фильтрующей функции передается код хука, показывающий, была ли произведена посылка сообщения из текущего потока, а также указатель на структуру с информацией о сообщении.
<...>
Этот хук использует значительное количество системных ресурсов, особенно, когда он установлен с системной областью видимости, поэтому используйте его только в целях отладки.
Тебе как раз для отладки.