Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Клики мышкой на движущийся объекты на экране, как сделать? 
:(
    Опции темы
nikki4
Дата 6.4.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 27.10.2009

Репутация: нет
Всего: нет



На экране монитора есть некоторая область и по ней перемещаются некоторые объекты (например белые кружочки с черным кружочком внутри).

Нужно сделать так, чтобы делались клики мышкой на эти движущиеся объекты

Мне кажется можно как-то делать поиск объекта на экране по цвету (например кликать на белый цвет).. или искать объекты сравнивая с картинкой объекта...

Вот только как такое можно сделать не знаю, может кто-нибудь подскажет? какие функции для этого использовать нужно? 
PM MAIL   Вверх
Coder
Дата 7.4.2010, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 2
Всего: 11



Ну ты же рисуешь кружок по координатам, т.е. знаешь их?
При клике так же известны координаты курсора, вот и сравнивай их с координатами кружочка.

PM MAIL   Вверх
Snowy
Дата 7.4.2010, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Он не рисует кружочки.
Кружочки рисует другая программа.
Задача пользователя тыкать в них мышкой.
Лень двигатель прогресса.
Человек хочет автоматизировать действия пользователя.
Задача делится на 3 подзадачи.
1. Получить снимок экрана или окна.
2. Найти любой или все интересующие объекты.
3. Навести курсор мышки и сымитировать клик.

1 зависит от способа вывода изображения. 
Если кружки - отдельные окна, то 1-й этап вообще не нужен.
Если это GDI, то получить можно обычным bitblt
Если это DX/OGL графика, то получать нужно средствами DX/OGL

2. Зависит от 1 пункта. Это самый сложный момент.

3. Самое простое. Тут никаких сложностей.

Начни с п.0 - проанализируй окно - что оно из себя представляет, чем являются кружочки.
От этого зависит реализация п.1.
PM MAIL   Вверх
nikki4
Дата 7.4.2010, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 27.10.2009

Репутация: нет
Всего: нет



Цитата(Snowy @ 7.4.2010,  10:48)
Он не рисует кружочки.
Кружочки рисует другая программа.
Задача пользователя тыкать в них мышкой.
Лень двигатель прогресса.
Человек хочет автоматизировать действия пользователя.
Задача делится на 3 подзадачи.
1. Получить снимок экрана или окна.
2. Найти любой или все интересующие объекты.
3. Навести курсор мышки и сымитировать клик.

1 зависит от способа вывода изображения. 
Если кружки - отдельные окна, то 1-й этап вообще не нужен.
Если это GDI, то получить можно обычным bitblt
Если это DX/OGL графика, то получать нужно средствами DX/OGL

2. Зависит от 1 пункта. Это самый сложный момент.

3. Самое простое. Тут никаких сложностей.

Начни с п.0 - проанализируй окно - что оно из себя представляет, чем являются кружочки.
От этого зависит реализация п.1.

Snowy - вы всё правильно поняли. 

1. не разбираюсь в этих терминах.. но судя по описанию это всеже наверное GDI
я вообще думал можно сделать просто принтскрином снимок экрана, а потом вырезать эти объекты, после чего их как-то искать  на экране, а потом кликать.
А изображение там, обычное окно  браузера в котором  флеш игра. Собственно в этой игре иногда и появляются случайном месте объекты (я их условно назвал белыми кружочками), которые начинают двигаться, и на них нужно кликать.. И нужно автоматизировать, чтобы программа сама кликала при их появлении.. не знаю почему, но у меня какой-то бзик вчера начался.. вместо того, чтобы делать это руками, попробовать разобраться с функциями и написать программу. Интересно, даже больше чем сама игра..

2. то что это самый сложный как раз понимаю, вот только как делать, в зависимости от моего случая?

3. сегодня ночью уже научился smile 


Это сообщение отредактировал(а) nikki4 - 7.4.2010, 11:42
PM MAIL   Вверх
Frees
Дата 7.4.2010, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Цитата(nikki4 @  7.4.2010,  14:32 Найти цитируемый пост)
в зависимости от моего случая

дак а какой у тебя случай? что это за кружочки, никтож не знает




Это сообщение отредактировал(а) Frees - 7.4.2010, 11:46


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Snowy
Дата 7.4.2010, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Код
var
  bmp: TBitMap;
  ie:  HWND;
  dc:  HDC;
  r:   TRect;
begin
  bmp := TBitmap.Create;
  bmp.PixelFormat := pf32bit;
  ie := FindWindow('IEFrame', nil); // Это хэндл окна ie - если не ie, получай как-нить сам
  if ie <> 0 then
  dc := GetDC(ie);
  Windows.GetClientRect(ie, r);
  bmp.Width := r.Right - r.Left;
  bmp.Height := r.Bottom - r.Top;
  BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, dc, 0, 0, SRCCOPY);
  ReleaseDC(ie, dc);
end;
В итоге в bmp будем иметь снимок окна IE.
IE должен быть активным окном, иначе просто не отрисуется и снимешь мусор.
Оптимально было бы использовать встроенный в свою программу WebBrowser.

По пункту 2 помочь ничем не могу - в теории распознавания изображений никакой практики не имею.
PM MAIL   Вверх
RomanEEP
Дата 8.4.2010, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 1
Всего: 8



Распознавание изображений очень непростая задача.  
Если есть возможность, то стоит вместо этого перехватить вызовы GDI или другой библиотеки по отрисовки этих самых кружков.
Если этот способ не прокатит, то можно посмотреть здесь http://opencv.willowgarage.com/wiki/. Насколько я знаю, это лучшее что есть в бесплатном доступе.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.