Macro em Delphi que reconhece imagem na tela. É possível?

09/04/2017

0

Olá amigos, boa noite. Estou tentando desenvolver um aplicativo que grava e executa macros, mas como o ambiente onde ele irá trabalhar terá os gráficos em posições diferentes aleatoriamente, eu precisarei que ele reconheça algumas imagens e clique nelas. Pesquisei sobre o assunto mas não encontrei basicamente nada. Não sei se isso é possível, se alguém puder ajudar eu serei muito grato. Desde já muito obrigado!
Luziraldo Godinho

Luziraldo Godinho

Responder

Posts

10/04/2017

Luziraldo Godinho

Boa tarde pessoal. Incrementando o assunto, eu encontrei um programa russo que faz isso, mas ele trabalha com uma linguagem diferente e é muito complicado de usar, até mesmo porque é em russo. Mas consegui o código fonte do script e talvez seja familiar para alguém.

int col_KIB, ex_KIB, ey_KIB, sum_KIB, x_KIB, y_KIB;
int Image_0_KIB[16][19];
int Image_1_KIB[23][21];
int Image_2_KIB[31][33];

start_();

m_KIB1: findimage_(#Image_0_KIB[0][0], 0, 0, 0, 1, 5, 5, 50, -1, 0, 100, 1, 0, 0, ex_KIB, ey_KIB, #sum_KIB, #x_KIB, #y_KIB);
findimage_(#Image_1_KIB[0][0], 0, 0, 0, 1, 5, 5, 100, -1, 0, 100, 1, 0, 0, ex_KIB, ey_KIB, #sum_KIB, #x_KIB, #y_KIB);
if (findimage_(#Image_2_KIB[0][0], 0, 0, 0, 0, 0, 0, 1000, -1, 0, 100, 1, 0, 0, ex_KIB, ey_KIB, #sum_KIB, #x_KIB, #y_KIB)>0) goto m_KIB4; 
else goto m_KIB1;
m_KIB4: key_(112, 1, 500, 1000);



function start_()
{
getdisplay(col_KIB, ex_KIB, ey_KIB);
load_image_();
pause(1000);
}


function key_(int k, int m, int p1, int p2)
{
pause(p1);
if (m==1) key(k);
if (m==2) keydown(k);
if (m==3) keyup(k);
pause(p2);
}


function findimage_(int #Image, int t, int p1, int p2, int m, int xm, int ym, int p3, int fon, int r, int p, int k, int xs, int ys, int xf, int yf, int#sum, int#x, int#y)
{
int timKIB, sumKIB, xKIB, yKIB;
pause(p1);
sumKIB=0;
if (t!=1) timKIB=gettime();
a: if (r==0 && p==100){sum=findimage(k, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, -1); if (sum>0) goto e;}
else {sum=findimage(k, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, r, r, r, r, r, r, p, 1, -1); if (sum>0) goto e;}
if (t==0) return 0;
if (gettime()-timKIB<t){sleep(20); goto a;}
return 0;
e: sumKIB=sum; xKIB=x[0]; yKIB=y[0];
pause(p2);
if (m==1){mouse(LEFT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==2){mouse(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==3){mouse(RIGHT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==4){mousedown(LEFT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==5){mousedown(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==6){mousedown(RIGHT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==7){mouseup(LEFT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==8){mouseup(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==9){mouseup(RIGHT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==10){mousemove(xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
return sumKIB;
}




function load_image_()
{
loadimage (#Image_0_KIB[0][0], "D:\\Nova pasta\\Image_0.bmp");
loadimage (#Image_1_KIB[0][0], "D:\\Nova pasta\\Image_1.bmp");
loadimage (#Image_2_KIB[0][0], "D:\\Nova pasta\\Image_2.bmp");
}



Se parece muito com Delphi. Esse script eu fiz em um ambiente gráfico dentro do programa, fazendo com que o mouse clicasse em alguns botões da calculadora, depois ele retornou esse código fonte citado acima.

Por favor, alguém pode me ajudar? Desde já muito obrigado!
Responder

14/04/2017

Luziraldo Godinho

Boa noite a todos.
Bom, vou simplificar a pergunta para facilitar a resposta pois, parece estar complicado alguém me ajudar.

Pode o Delphi reconhecer uma imagem na tela?

Através de Componente OCR é possível capturar o texto de uma imagem, o que eu gostaria é que o delphi reconhecesse a imagem na tela, a exemplo do que faz esse programa:
[url:descricao=Первое знакомство с Кибор. Визуальное программирование]https://www.youtube.com/watch?v=gBrFosOHHTI&t=561s[/url]
Responder

15/04/2017

Raimundo Pereira

Bom dia.
Me corrija se estiver errado, mais o que foi feito no exemplo, não foi selecionar uma determinada área e transformar em outra imagem ?
É isso que você precisa?
Responder

15/04/2017

Raimundo Pereira

Se for isso dê uma olhada

Exemplo
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar