Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2020, 20:05   #1
Astrola
Пользователь
 
Регистрация: 04.09.2018
Сообщений: 16
Восклицание Эмуляция клика мыши по координатам

Есть програма для видеорегистратора iVMS-4200, написана на QT5.
Отказывается принимать сообщения от сторонних приложений.
Комбинации вроде
Код:
SetCursorPos(p.x,p.y);
mouse_event(MOUSEEVENTF_LEFTDOWN,p.x,p.y,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,p.x,p.y,0,0);
просто игнорируются, курсор переводится на нужное место, но клика нет.
Вообще реально ли програмно достучаться до нее, тоесть добиться реагирования на сообщения мыши с нажатием кнопок?

Используется Делфи 10.3; Виндовс 10х64.
Astrola вне форума Ответить с цитированием
Старый 26.12.2020, 22:47   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Если через SendInput попробовать?
Arigato вне форума Ответить с цитированием
Старый 27.12.2020, 12:45   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Astrola Посмотреть сообщение
тоесть добиться реагирования на сообщения мыши с нажатием кнопок?
Если на мышь нет реакции,
то можно вычислив ID-кнопки послать ей сообщение "Enter" от клавиатуры.

А вообще, если мышиный курсор дёргает, то и кликать должен - см. SendInput(), RawInput(), PostMessage().
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 27.12.2020, 13:31   #4
Astrola
Пользователь
 
Регистрация: 04.09.2018
Сообщений: 16
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
Если на мышь нет реакции,
то можно вычислив ID-кнопки послать ей сообщение "Enter" от клавиатуры.

А вообще, если мышиный курсор дёргает, то и кликать должен - см. SendInput(), RawInput(), PostMessage().

PostMessage(), SendMessage(), SendInput(), не работают.

Код:
var
  eu: array [0..1] of TInput;
begin
  SetCursorPos(71,184);
  ZeroMemory(@eu,sizeof(eu));
  eu[0].Itype := INPUT_MOUSE;
  eu[0].mi.dwFlags :=MOUSEEVENTF_LEFTDOWN;
  eu[1].Itype := INPUT_MOUSE;
  eu[1].mi.dwFlags :=MOUSEEVENTF_LEFTUP;
  SendInput(2,eu[0],sizeof(TInput));
end;
RawInput() не пробовал, но думаю результат будет тот же.

Курсор переводится ОС, и к отправке внутренних комманд чужой програме никакого отношения не имеет, поэтому курсор перемещается, а вот клики мышки не работают.

По поводу клавиатуры.
Вариант не рассматривал, поскольку ориентировался на то, что програма написана на QT5, и там вроде как используются свои внутренние обработчики устройств, потому и сообщения идущие со стороны через дескрипторы или еще каким-то способом игнорируются.
Astrola вне форума Ответить с цитированием
Старый 27.12.2020, 13:42   #5
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

В окне программы вообще есть какие-нибудь буттоны?
Это виндовое приложение? На каком именно элементе нужно кликнуть мышью?
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 27.12.2020 в 13:45.
R71MT вне форума Ответить с цитированием
Старый 27.12.2020, 14:02   #6
Astrola
Пользователь
 
Регистрация: 04.09.2018
Сообщений: 16
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
В окне программы вообще есть какие-нибудь буттоны?
Это виндовое приложение? На каком именно элементе нужно кликнуть мышью?
Клики нужны в местах обозначенных стрелочками на картинке. В первом посте указывал виндовс 10.
Изображения
Тип файла: jpg Kam1.jpg (57.7 Кб, 8 просмотров)
Astrola вне форума Ответить с цитированием
Старый 27.12.2020, 15:08   #7
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Сам регистратор подключён сейчас?
Просто встречал, что функции подобного софта активируются при подключении девайса. А так, попробуй найти эти элементы оконными хуками и послать им сообщения - прожка в скрепке может это делать.
Вложения
Тип файла: zip WindowHack.zip (29.9 Кб, 7 просмотров)
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 28.12.2020, 00:43   #8
Astrola
Пользователь
 
Регистрация: 04.09.2018
Сообщений: 16
По умолчанию

Как то хитро сделана программа. Рабочая область у нее разделена на фреймы: левая панель, центральная, правая, нижняя и пару верхних.

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

На все отправленные сообщения фреймы не реагируют.

Последний раз редактировалось Astrola; 28.12.2020 в 00:45.
Astrola вне форума Ответить с цитированием
Старый 29.12.2020, 23:58   #9
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от Astrola Посмотреть сообщение
курсор переводится на нужное место, но клика нет.
Потому что не так. Если указывать координаты в Mouse_Event, то с MOUSEEVENTF_ABSOLUTE и переводить в абсолютные.
Если вначале поставить мышку в нужную точку, то координаты уже не надо
Код:
SetCursorPos(200,200);//ставим мышку куда надо
Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//левый клик 
Mouse_Event(MOUSEEVENTF_LEFTUP,0,0,0,0);
kvitaliy вне форума Ответить с цитированием
Старый 30.12.2020, 10:38   #10
Astrola
Пользователь
 
Регистрация: 04.09.2018
Сообщений: 16
По умолчанию

Цитата:
Сообщение от kvitaliy Посмотреть сообщение
Потому что не так. Если указывать координаты в Mouse_Event, то с MOUSEEVENTF_ABSOLUTE и переводить в абсолютные.
Если вначале поставить мышку в нужную точку, то координаты уже не надо
Код:
SetCursorPos(200,200);//ставим мышку куда надо
Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//левый клик 
Mouse_Event(MOUSEEVENTF_LEFTUP,0,0,0,0);
Пробовал по разному и так тоже - не работает. Когда запущена програма она блокирует сообщения, к примеру намлок калькулятор не работает по клавише вызова, пока не свернешь ее.
Astrola вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция клика в EmbeddedWB1 aesoem Общие вопросы Delphi 2 20.02.2012 15:22
Эмуляция клика мыши в чужом окне MyIE Win Api 16 06.10.2011 23:26
Эмуляция клика в заданном месте экрана Faydaen Помощь студентам 3 27.09.2011 09:01
Эмуляция клика мыши в C# GApe Общие вопросы C/C++ 0 04.05.2010 20:40
Эмуляция клика мыши Stimer Win Api 1 05.02.2009 04:06