Вверх ↑
Этот топик читают: Гость
Ответов: 378
Рейтинг: 61
#1: 2011-07-17 07:51:22 ЛС | профиль | цитата
Подскажите - в каком виде передавать параметр lParam компоненту SendMessage с координатами (напр. 0 и 0) для мыши? И что еще не правильно в схемке-примере?

[offtop]При нажатии на центральную кнопку, форме должно быть послано сообщение WM_LBUTTONDOWN с координатами 0,0 которое нажмет на кнопку в левом верхнем углу формы[/offtop]
code_24654.txt
карма: 0
0
файлы: 1code_24654.txt [613B] [113]
Ответов: 3349
Рейтинг: 233
#2: 2011-07-17 08:29:31 ЛС | профиль | цитата
PointXY
карма: 1

1
Голосовали:kacmem
Ответов: 3889
Рейтинг: 362
#3: 2011-07-17 09:53:14 ЛС | профиль | цитата
kacmem, AFAIK, здесь желательны асинхронные PostMessage или DispatchMessage (делается через IC). Причем надо не забыть WM_LBUTTONUP и в wParam ставитьснимать бервый бит (отвечающий за ЛКМ).
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#4: 2011-07-17 12:55:53 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2025-01-11 07:49:16
карма: 0

0
Ответов: 378
Рейтинг: 61
#5: 2011-07-17 13:00:11 ЛС | профиль | цитата
[offtop]93.88.216.36, это я - kacmem[/offtop]
карма: 0
0
Ответов: 3889
Рейтинг: 362
#6: 2011-07-17 13:07:03 ЛС | профиль | цитата
93.88.216.36, используемый Вами SendMessage насильно вызывает обработчик сообщений целевого окна, то есть вашего же приложения в данном примере, и ждёт результата. Вам же стоит отправить в очередь цепочку DOWN - MOVE - UP, AFAIK, это может потребовать программирования на Delphi (ObjectPascal) в InlineCode. Оба штатных способа отправки сообщений (второй - WinTools) используют SendMessage т.к. она возвращает результат.
карма: 1

0
Ответов: 378
Рейтинг: 61
#7: 2011-07-17 13:19:44 ЛС | профиль | цитата
1nd1g0, вот, отправляю цепочку DOWN - MOVE - UP стороннему приложению. Не работает.

code_24658.txt

это может потребовать программирования на Delphi (ObjectPascal) в InlineCode

Не знаю я Delphi, PHP пожалуйста ...

Дело в том, что в своей программе я сделал нажатие мышкой в нужных координатах захваченного окна и возврат ее на место, работает нормально. Но хотелось бы отправлять нажатия мышкой окну программы через сообщения.
карма: 0
0
файлы: 1code_24658.txt [1.5KB] [101]
Ответов: 3889
Рейтинг: 362
#8: 2011-07-17 13:31:09 ЛС | профиль | цитата
kacmem, в чужих приложениях с SendMessage могут быть проблемы т.к. не известно как и какие сообщения обрабатываются элементами управления. Но в данном случае ошибка в том, что вы шлёте сообщения ОСНОВНОЙ ФОРМЕ, а должны слать ЦЕЛЕВОМУ ЭЛЕМЕНТУ. Демонстрирую:

code_24659.txt
------------ Дoбавленo в 13.31:
Только не забывайте, что, например, при открытии того же всплывающего окна блокируется очередь сообщений для целевого элемента родительской формы.
карма: 1

0
файлы: 1code_24659.txt [1.8KB] [145]
Ответов: 378
Рейтинг: 61
#9: 2011-07-17 13:33:07 ЛС | профиль | цитата
Теперь ясно. Придется дальше эмулировать нажатия мышкой.

1nd1g0, спасибо за помощь.
карма: 0
0
Ответов: 3889
Рейтинг: 362
#10: 2011-07-17 13:57:58 ЛС | профиль | цитата
kacmem писал(а):
дальше эмулировать нажатия мышкой

Дело Ваше, зато через сообщения можно эмулировать нажатия на перекрытом или свёрнутом окне, но придётся попотеть в изучении иерархии объектов интерфейса целевого приложения, это факт.
карма: 1

0
Ответов: 378
Рейтинг: 61
#11: 2011-07-17 14:19:10 ЛС | профиль | цитата
Я понимаю все прелести сообщений, потому и хотел это сделать.
Я изучал его (приложение) с помощью InqSoft Window Scanner, сканирование ничего не дало
карма: 0
0
Ответов: 3349
Рейтинг: 233
#12: 2011-07-17 15:32:36 ЛС | профиль | цитата
code_24660.txt
Ты посылаешь его окну верхнего уровня, т.е. обработчик события вызывается у окна, а не у кнопки.
То окно которому посылаешь нажатие и будет его обрабатывать, а не будет искать контрол находящийся в этой позиции.
карма: 1

0
файлы: 1code_24660.txt [612B] [121]
Ответов: 3889
Рейтинг: 362
#13: 2011-07-17 16:21:22 ЛС | профиль | цитата
Ivann, выше уже трижды писал, ещё раз повторюсь: как минимум
1nd1g0 писал(а):
надо не забыть WM_LBUTTONUP


code_24662.txt
------------ Дoбавленo в 16.21:
kacmem писал(а):
сканирование ничего не дало

На днях уже встречал это опрометчивое заявление, и ответил на него тут.

Мало того, что подобных "шпионов" - десятки, так у Вас под рукой есть всё, чтобы сделать ещё сотню - HiAsm
карма: 1

0
файлы: 1code_24662.txt [1.1KB] [113]
Ответов: 378
Рейтинг: 61
#14: 2011-07-17 17:23:54 ЛС | профиль | цитата
А вы знаете, заменив связку DOWN-MOVE-UP на WM_LBUTTONDBLCLK - всё заработало
Сообщения отправляю просто форме...

Спасибо всем за массу подкинутого интересного материала для размышления.
карма: 0
0
Ответов: 3889
Рейтинг: 362
#15: 2011-07-17 20:32:19 ЛС | профиль | цитата
kacmem писал(а):
WM_LBUTTONDBLCLK - всё заработало


Вот Вам ещё материал для размышления, WM_LBUTTONDBLCLK обрабатывается только окнами, у которых в стиле класса есть CS_DBLCLKS Если на классических элементах управления этот стиль есть т.к. наследуется, то на каком-нибудь нештатном контроле (если автор не позаботился заранее) такое сообщение может быть просто проигнорировано. Я ничего не делаю просто так, если я выставляю бит (флаг) зажатой левой кнопки мыши в параметре, и если я шлю три сообщения вместо одного - значит зачем-то это нужно.
В данных примерах это нужно для полноценной эмуляции максимума параметров и событий, происходящих при реальном нажатии на кнопку мыши. И для полного понимания происходящего читателями. Я ведь пишу примеры не только Вам, но и всем, кто, надеюсь, когда-либо воспользуется поиском по форуму и найдёт эту тему (а этот вопрос всплывает с завидным постоянством). Если в Вашем случае, по удачному стечению обстоятельств, процедура обработки событий формы имеет нужный стиль и воспринимает двойной клик как два этапа - установку фокуса и нажатие на элемент, то при работе с другими приложениями (я Выше уже объяснил - почему) может так не повезти. Никогда нельзя быть уверенным, на что именно и как реагирует очередной элемент управления: только на одно сообщение, на совокупность сообщений, на параметры в сообщениях и т.д., потому я эмулирую всё целиком, и потом могу копипастить это всюду с большей долей уверенности в работоспособности (даже если сменится логика обработчика в программе-жертве, или сменится сама "жертва")
карма: 1

2
Голосовали:kacmem, ric
Сообщение
...
Прикрепленные файлы
(файлы не залиты)