|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Задачка для первого класса
Всем привет!
Надо написать прогу, вот решил спросить, с какого конца к этой задаче подступиться. Итак. Что мне нужно: - взять снимок экрана у EXE-приложения (внутри экзешника вроде флеш, если это важно, окно размером 800*600), причем взять этот снимок надо быстро и удобно для дальнейшей работы с ним. - найти (каким образом? перебором массива?) некие пиксели определенного цвета на этом снимке экрана. - пошевелить мозгами (этот вопрос я сам решу) - нажать кнопку мыши в определенном месте окна EXE-приложения, а также по необходимости ввести некие значения с клавы. Всё. Главный вопрос - можно ли сделать так, чтобы моё приложение работало с этим EXE-файлом в фоновом режиме? Чую, что нет, но спросить надо. Спасибо за прочтение |
#2
|
|||
|
|||
Походу пьесы тебе нужен БОТ, для флеш игр,
я недавно написал бота, для игры Большой Город вконтакте, работает со всеми городами, все собирает, и ставит производство. Один его минус, работает в активном режиме, делает снимок самой флешки из броузера, ищет картинки 20х20 в снимке, а потом прокликивает. А поповоду фоногого режима, все просто, поставил Virtual PC, в нем и запускаю. работать не мешает) Вот только просто так, я тебе исходник не дам, уж больно много времени потратил) Но если интересно, пиши) |
#3
|
||||
|
||||
Вот валялись какие-то заготовки:
Код:
var x0,y0,x1,y1:integer; i,j,zu:integer; DC: HDC; Color: Cardinal; begin //x1,y1 - верхний левый угол, x2,y2 нижний правый угол, окна с приложением i:=strtoint(edit1.Text); //x1 j:=strtoint(edit2.Text); //y1 x1:=strtoint(edit3.Text); //x2 y1:=strtoint(edit4.Text); //y2 //edit5.Text - код цвета который надо найти в 16-ти ричной записи (прим:FFFFFF) while i<=x1 do begin While j<=y1 do begin DC := CreateDC('Display', nil, nil, nil); Color := GetPixel(DC,i ,j ); //получаем цвет в точке if edit5.Text=IntToHex(color,6) then begin SetCursorPos(i,j);{тут вставляешь процедуру кликалки} sleep(100); end; DeleteDC(DC); j:=j+5; //просматриваем через 5 пикселей, можно сделать меньше в зависимости от размера элементов end; j:=strtoint(edit2.Text); i:=i+5; end; end; Последний раз редактировалось Admin, Сегодня в 10:32. |
#4
|
|||
|
|||
Неудачное решение ты предлогаешь.
Что-то афтор вопроса заглох, Афтор, у меня к тебе встречное предложение, я тебе отдам исходники бота, но взамен ты решишь задачку (может она тобой уже решена, судя по параллейной твоей теме). Мне надо флешку, или страничку со флешкой открыть у себя в дельфях, через тот же TWebBrowser, хотя у меня есть и другие неплохие исходники броузеров, но у меня проблема, новые игры в том же контакте, передают флешке набор параметров, и эти флешки в дельфях не открываются, вообщем в этом и вся проблема, решить ее не смог. В двух словах о коде бота: 1) Автоопределение окон с флешкой. (программа работает с окнами) 2) Делается снимок не всего экрана, а только области флешки. 3) Очень быстрый алгоритм поиска картинки. 4) Можно быстро менять набор искомых картинок. 5) Быстро менять правила алгоритма (гибкие настройки) Работает на ура все это дело. так что думай, буду рад сотрудничеству..) |
#5
|
|||
|
|||
сорри.
но я пока ничего не смыслю в программировании, только начинаю. Рад бы помочь, да не могу. |
#6
|
|||
|
|||
Уважаемый mr. friz!
Ваш кусок кода прекрасно работает. Но. Я в целях исследования скорости работы сделал приращение не на 5, а на 1 пиксель, и всё, программа и так-то работала медленно, а тут вообще на несколько минут уходила в себя, пока разбирала кусок экрана размером 100х100 пикселей. ОООчень долго! Мало того - пока прога ковыряется с канвасом, у меня форма почему-то застывает... и динамические надписи на LABEL (служебная инфа) застревает... странно это всё Может, существует возможность как-то оперативно считать кусок экрана в массив? Если вдуматься, в куске 100х100 пикселей всего-то 10 тысяч пикселей, должно по идее моментально отрабатывать. Как думаете? |
#7
|
|||
|
|||
А если быть точнее, сообщаю результаты последнего теста:
окно 1024*600, шаг 5 пикселей и по ширине, и по высоте. Прога работала 13 минут. Мне бы секунды 3... |
#8
|
|||
|
|||
Где же Вы, Мистер Фриз
|
#10
|
|||
|
|||
Биг сенкс, буду изучать!
|
#11
|
||||
|
||||
Цитата:
кстати а ты случаем не оставил в коде процедуру sleep(100) ? очень похоже что да Убери ее и будет тебе счастье! Я специально ее делал в своей проге что бы видеть как двигается мышка...в целом не помню зачем но надо было Последний раз редактировалось Admin, Сегодня в 10:32. |
#12
|
|||
|
|||
Нее, ну конечно нет.
Да и функцию движения мышки к найденной точке я тоже убрал. Все равно работает очень медленно. Но тут какое дело. Я ж там еще добавил в случае найденных точек закрашивание найденных пикселей красным цветом. Ну, так, чтобы было визуально видно, как прога работает. Ну, и еще сначала я рисовал прямоугольник, чтобы обозначить периметр поиска. Всё это вряд ли может помешать быстродействию, потому что периметр показывается один раз при старте проги, а закраски пикселей происходит только когда они найдены, то есть редко. Я вывел на морду Label-ы и application.processmessages, чтобы видеть, какие координаты сейчас прога обрабатывает. Может, и в этом дело тоже, вдруг нельзя при работе с канвасом какую-то динамику на форме делать. Я ж хз. А попутно у меня вот еще какой вопрос. Мне чуть выше дали ссылку на пост, где моя задача вроде как выполняется. вот она Посмотрите, плз там, как вообще прога там примерно работает? Видно, что круть но непонятно, во первых, что эта прога вообще делает, и если что-то ищет, то как ей передать входные параметры и увидеть результат. Все же чую, что дело идет к Скайлайну... |
#13
|
||||
|
||||
Цитата:
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#14
|
|||
|
|||
Ок.
А что именно другое она делает? Наверняка ж пригодится. Очень уж хочется разобраться. А потом уже буду пробовать править ее под свои нужны. |