Preciso de um script - disposto a pagar

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

rdmartins
Posts: 7
Joined: 11 Jan 2020, 09:12

Preciso de um script - disposto a pagar

11 Jan 2020, 09:21

Bom dia,
Galera, preciso de um script que faça reconhecimento de cor na tela, e a partir dessa cor que o script detectou, ele executa um comando.
Quem puder me dar uma mão ai.
Posso pagar pelo serviço.
Obrigado.
User avatar
Gio
Posts: 1248
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Preciso de um script - disposto a pagar

13 Jan 2020, 16:47

Boa tarde Rdmartins :thumbup:

Peço que não crie múltiplos tópicos/posts sobre a mesma dúvida. Aguarde um pouco após postar uma vez, pois as vezes a reposta não vem na hora (principalmente nos finais de semana :beer: )
rdmartins wrote:
12 Jan 2020, 14:16
Gio, também quero um script assim.
Estou fazendo da seguinte forma, mas não esta dando certo.
Pode me ajudar?

Code: Select all

a::
CoordMode, Pixel, Screen
PixelSearch, 1050, 117, 1133, 969, 0x55BC65, 3, Fast RGB
if (ErrorLevel = 0)
{
	Sleep, 100
	CoordMode, Mouse, Screen
	Click, left, 1880, 375
	Return
}

PixelSearch, 1050, 117, 1133, 969, 0xDC5039, 3, Fast RGB
if (ErrorLevel = 0)
{
	Sleep, 100
	CoordMode, Mouse, Screen
	Click, left, 1871,  469
	Return
}
Sobre este código acima que você postou no outro tópico, vejo que a área de busca informada no comando PixelSearch é muito estreita. No momento ela vai do pixel de posição horizontal 1050 até o pixel de posição horizontal 1133. Isso é tipo um vigésimo da largura total da tela em uma resolução Full HD. Tem certeza que é apenas nessa área que você quer buscar o pixel da cor em questão?

Outra coisa que pode estar acontecendo: você verificou se o código RGB das cores a serem buscadas são estes mesmos?

0x0x55BC65 em RGB é esta cor: https://www.google.com/search?client=firefox-b-d&q=color+55BC65
0xDC5039 em RGB é esta cor: https://www.google.com/search?client=firefox-b-d&q=color+DC5039

São estas mesmo as cores que você esperava?

E quanto ao parâmetro de tolerância, você estipulou no máximo 3 tons em cada canal. Isso é realmente suficiente? (será que as cores não estão variando um pouco mais?)

Verifique estas 3 coisas e acredito que vai descobrir o que pode estar acontecendo de errado. Se mesmo assim não tiver resultados, poste abaixo :thumbup:
rdmartins
Posts: 7
Joined: 11 Jan 2020, 09:12

Re: Preciso de um script - disposto a pagar

14 Jan 2020, 10:40

Boa tarde.

Desculpa ter postado várias vezes.
Consegui o resultado no seguinte script.

Code: Select all

#SingleInstance force
Insert::
SetTimer script01, 60000		; Every 6 seconds

script01:
	CoordMode, Pixel, Screen
	PixelSearch, varX, varY, 1048, 205, 1147, 395, 0x55BC65, 3, Fast RGB
	if (ErrorLevel = 0) {
		Sleep, 10
		CoordMode, Mouse, Screen
		Click, 1876, 361
		MouseMove, 1876,  561
	}

	PixelSearch, varX, varY, 1048, 205, 1147, 395, 0xDC5039, 3, Fast RGB
	if (ErrorLevel = 0) {
		Sleep, 1
		CoordMode, Mouse, Screen
		Click, 1876, 461
		MouseMove, 1876,  561
	}
Return

End::exitapp

Funciona bem, mas tem hora que ele não reconhece a cor.
Vou verificar a tonalidade das cores correta.
O espaço realmente não tem como ser a tela inteira, pois há várias cores repetidas (vermelho e verde) na tela, mas a captação da cor tem que ser em um pixel exato da tela, e não na tela toda.

Posto o resultado.
Obrigado.
rdmartins
Posts: 7
Joined: 11 Jan 2020, 09:12

Re: Preciso de um script - disposto a pagar

14 Jan 2020, 11:10

Gio. Qual a melhor forma do script ter eficiência na leitura da cor?
São cores verde e vermelho.
Com o fundo branco ou com o fundo preto?
User avatar
Gio
Posts: 1248
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Preciso de um script - disposto a pagar

14 Jan 2020, 16:56

Boa tarde Rdmartins.
Funciona bem, mas tem hora que ele não reconhece a cor.
Que bom que conseguiu fazer o que queria.

As vezes o comando PixelSearch pode falhar. Se isso ocorrer, a variável ErrorLevel receberá o valor 2. Assim, ao invés de verificar apenas se ErrorLevel = 0, você pode verificar também se ErrorLevel ficou igual a 2, e caso tenha ficado, repetir o comando PixelSearch (ou até mesmo repetir algumas vezes o comando sempre que não encontrar a cor desejada. Isso também pode aumentar a confiabilidade do script).
Gio. Qual a melhor forma do script ter eficiência na leitura da cor?
Muitas coisas podem impactar a performance do comando. A área de busca é uma delas (quanto menor a área de busca, mais rápida a execução do comando). Outra questão é o uso (ou não) do método Fast. Outra possibilidade é a configuração da variação da tonalidade permitida (o comando termina quando encontra uma cor nos termos solicitados, então se mais cores da imagem puderem ser encontradas, ele pode terminar mais rápido).

Também é bom mencionar que alguns aspectos podem influenciar na performance do script (e não do comando em si), como o uso do SetBatchLines, -1. Use essa configuração em seu script para ter maior desempenho nele.

Outra questão: Pelo que vejo no SetTimer, sua rotina está sendo executada a cada 60 segundos (você escreveu 6 no comentário, mas configurou 60.000 milisegundos, o que dá 60 segundos). Depois disso o script fica inerte até que se complete mais 60 segundos. Tem certeza de que é isso que deseja? Você pode fazer a pesquisa a cada 30, 20, 10 segundos ou até menos e também é possível fazer a espera ocorrer somente se o comando deu certo (por exemplo, se não deu certo, espera apenas 1 ou 2 segundos, mas se deu certo, espera os 60).

Mais uma opção: Existe um terceiro comando de busca de imagens no AutoHotkey: é o comando PixelGetColor. Esse comando retorna a cor de um único pixel cujas coordenadas da tela você determina. Se usar esse comando de uma forma inteligente e em conjunto com o SetBatchLines, -1, você pode criar uma rotina onde qualquer possibilidade da imagem alvo estar presente seja detectada olhando-se apenas um punhado de pixels. Exemplo: um boneco com uma área de cor verde de 100x50 pode ser encontrado pesquisando apenas um pixel a cada 50 pixeis horizontais e 25 pixeis verticais e vendo se é da cor verde (Isso, é claro, é uma simplificação, mas se for bem planejado um código assim pode funcionar e rodar absurdamente rápido).
Com o fundo branco ou com o fundo preto?
Não entendi a pergunta. A cor é buscada na parte visível da tela. Ter um fundo branco ou preto só traria algum efeito se a imagem em exibição não for 100% opaca, caso em que a cor resultante será um fator da transparência da imagem e da cor de fundo em questão. Mas se isso ocorrer, o código da cor resultante será outro, então basta tirar um print e pesquisar pelo código da cor final em exibição.

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 15 guests