Подскажите - в каком виде передавать параметр lParam компоненту SendMessage с координатами (напр. 0 и 0) для мыши? И что еще не правильно в схемке-примере?
[offtop]При нажатии на центральную кнопку, форме должно быть послано сообщение WM_LBUTTONDOWN с координатами 0,0 которое нажмет на кнопку в левом верхнем углу формы[/offtop]
code_24654.txt
Этот топик читают: Гость
Ответов: 378
Рейтинг: 61
|
|||
карма: 0 |
| ||
файлы: 1 | code_24654.txt [613B] [113] |
Ответов: 3349
Рейтинг: 233
|
|||
карма: 1 |
| ||
Голосовали: | kacmem |
Ответов: 3889
Рейтинг: 362
|
|||
kacmem, AFAIK, здесь желательны асинхронные PostMessage или DispatchMessage (делается через IC). Причем надо не забыть WM_LBUTTONUP и в wParam ставитьснимать бервый бит (отвечающий за ЛКМ).
|
|||
карма: 1 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 2 раз(а), последний 2025-01-11 07:49:16 |
|||
карма: 0 |
|
Ответов: 378
Рейтинг: 61
|
|||
[offtop]93.88.216.36, это я - kacmem[/offtop]
|
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
93.88.216.36, используемый Вами SendMessage насильно вызывает обработчик сообщений целевого окна, то есть вашего же приложения в данном примере, и ждёт результата. Вам же стоит отправить в очередь цепочку DOWN - MOVE - UP, AFAIK, это может потребовать программирования на Delphi (ObjectPascal) в InlineCode. Оба штатных способа отправки сообщений (второй - WinTools) используют SendMessage т.к. она возвращает результат.
|
|||
карма: 1 |
|
Ответов: 378
Рейтинг: 61
|
|||
1nd1g0, вот, отправляю цепочку DOWN - MOVE - UP стороннему приложению. Не работает.
code_24658.txt это может потребовать программирования на Delphi (ObjectPascal) в InlineCode Не знаю я Delphi, PHP пожалуйста ... Дело в том, что в своей программе я сделал нажатие мышкой в нужных координатах захваченного окна и возврат ее на место, работает нормально. Но хотелось бы отправлять нажатия мышкой окну программы через сообщения. |
|||
карма: 0 |
| ||
файлы: 1 | code_24658.txt [1.5KB] [101] |
Ответов: 3889
Рейтинг: 362
|
|||
kacmem, в чужих приложениях с SendMessage могут быть проблемы т.к. не известно как и какие сообщения обрабатываются элементами управления. Но в данном случае ошибка в том, что вы шлёте сообщения ОСНОВНОЙ ФОРМЕ, а должны слать ЦЕЛЕВОМУ ЭЛЕМЕНТУ. Демонстрирую:
code_24659.txt ------------ Дoбавленo в 13.31: Только не забывайте, что, например, при открытии того же всплывающего окна блокируется очередь сообщений для целевого элемента родительской формы. |
|||
карма: 1 |
| ||
файлы: 1 | code_24659.txt [1.8KB] [145] |
Ответов: 378
Рейтинг: 61
|
|||
Теперь ясно. Придется дальше эмулировать нажатия мышкой.
1nd1g0, спасибо за помощь. |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
kacmem писал(а): дальше эмулировать нажатия мышкойДело Ваше, зато через сообщения можно эмулировать нажатия на перекрытом или свёрнутом окне, но придётся попотеть в изучении иерархии объектов интерфейса целевого приложения, это факт. |
|||
карма: 1 |
|
Ответов: 378
Рейтинг: 61
|
|||
Я понимаю все прелести сообщений, потому и хотел это сделать.
Я изучал его (приложение) с помощью InqSoft Window Scanner, сканирование ничего не дало |
|||
карма: 0 |
|
Ответов: 3349
Рейтинг: 233
|
|||
code_24660.txt
Ты посылаешь его окну верхнего уровня, т.е. обработчик события вызывается у окна, а не у кнопки. То окно которому посылаешь нажатие и будет его обрабатывать, а не будет искать контрол находящийся в этой позиции. |
|||
карма: 1 |
| ||
файлы: 1 | code_24660.txt [612B] [121] |
Ответов: 3889
Рейтинг: 362
|
|||
Ivann, выше уже трижды писал, ещё раз повторюсь: как минимум
1nd1g0 писал(а): надо не забыть WM_LBUTTONUPcode_24662.txt ------------ Дoбавленo в 16.21: kacmem писал(а): сканирование ничего не далоНа днях уже встречал это опрометчивое заявление, и ответил на него тут. Мало того, что подобных "шпионов" - десятки, так у Вас под рукой есть всё, чтобы сделать ещё сотню - HiAsm |
|||
карма: 1 |
| ||
файлы: 1 | code_24662.txt [1.1KB] [113] |
Ответов: 378
Рейтинг: 61
|
|||
А вы знаете, заменив связку DOWN-MOVE-UP на WM_LBUTTONDBLCLK - всё заработало
Сообщения отправляю просто форме... Спасибо всем за массу подкинутого интересного материала для размышления. |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
kacmem писал(а): WM_LBUTTONDBLCLK - всё заработалоВот Вам ещё материал для размышления, WM_LBUTTONDBLCLK обрабатывается только окнами, у которых в стиле класса есть CS_DBLCLKS Если на классических элементах управления этот стиль есть т.к. наследуется, то на каком-нибудь нештатном контроле (если автор не позаботился заранее) такое сообщение может быть просто проигнорировано. Я ничего не делаю просто так, если я выставляю бит (флаг) зажатой левой кнопки мыши в параметре, и если я шлю три сообщения вместо одного - значит зачем-то это нужно. В данных примерах это нужно для полноценной эмуляции максимума параметров и событий, происходящих при реальном нажатии на кнопку мыши. И для полного понимания происходящего читателями. Я ведь пишу примеры не только Вам, но и всем, кто, надеюсь, когда-либо воспользуется поиском по форуму и найдёт эту тему (а этот вопрос всплывает с завидным постоянством). Если в Вашем случае, по удачному стечению обстоятельств, процедура обработки событий формы имеет нужный стиль и воспринимает двойной клик как два этапа - установку фокуса и нажатие на элемент, то при работе с другими приложениями (я Выше уже объяснил - почему) может так не повезти. Никогда нельзя быть уверенным, на что именно и как реагирует очередной элемент управления: только на одно сообщение, на совокупность сообщений, на параметры в сообщениях и т.д., потому я эмулирую всё целиком, и потом могу копипастить это всюду с большей долей уверенности в работоспособности (даже если сменится логика обработчика в программе-жертве, или сменится сама "жертва") |
|||
карма: 1 |
| ||
Голосовали: | kacmem, ric |