Autohotkey para procurar imagens

0

Estou aprendendo a usar o autohotkey e queria criar um script que abra um jogo a partir do steam e se conecte automaticamente a um servidor específico. Meu código até agora é:

F1::
Run, steam://rungameid/346110
Sleep, 15000 <--- This is more or less the time that my computer takes to load it, and I want another way to check if the game is already loaded
MouseClick, left, 156, 520 <--- (Position of "JOIN ARK")
Sleep, 1500 <--- This is the time that takes to load the button (JOIN LAST SESSION) also I want to check this with another more efficient way
MouseClick, left, 746, 940 <--- Click the button "JOIN LAST SESSION"
return

Então, com esse código, eu corro o jogo e participo da última sessão. Minha meta é fazer um loop que faça:

1- Abra o jogo, se não estiver aberto. Se estiver aberto, reinicie-o.

2- Verifique quando o menu aparecer e clique no botão "JOIN" localizado em x, y (156,520).

3- Verifique quando o botão "JOIN LAST SESSION" aparecer e clique nele.

4- Se aparecer algum pop-up (eu tenho screenhoots para todos os erros), vá para o ponto 1.

Eu estava pensando em OCR, mas não sei como implementá-lo com o autohotkey.

Qualquer ajuda seria apreciada.

    
por J0ki 21.05.2018 / 13:30

1 resposta

2

A solução para o seu problema é usar a função 'ImageSearch'.

Se você pressionar o botão da tela de impressão sempre que esses pop-ups ocorrerem, você poderá, então, CRTL + V colá-lo na pintura. Em seguida, recorte a imagem para que tudo que você tem é sua janela pop-up e salve-a como arquivo .bmp. Você pode então usar este arquivo de bitmap dentro do seu código do ImageSearch.

Uma rápida olhada no código do ImageSearch de alguém pode ser encontrada aqui .

Portanto, se o seu script encontrar a imagem que está procurando, você poderá descrever mais código para ser executado em 'ErrorLevel = 0'

Se o seu script não conseguir encontrar a imagem, você poderá delinear um código diferente para ser executado em "ErrorLevel = 1"

é aconselhável que neste ponto você comece a rotular suas seções de código e faça uso de 'Gosub' para que seu código possa pular entre rotinas quando atingir diferentes variáveis 'if'. Desta forma, você não precisa criar um script gigante repetindo-se demais.

Esteja ciente também de que o ImageSearch não funcionará corretamente quando o script for transferido de uma máquina para outra, se a resolução da tela for ligeiramente diferente. Se você tentar executar seu código em uma máquina que tenha uma resolução de tela diferente, será necessário fazer o screenshot de seus pop-ups novamente para que funcione.

Exemplo:

    ImageSearch, FoundX, FoundY, 40,40, 300, 300, C:\My Images\test.bmp

if ErrorLevel = 2
    MsgBox Could not conduct the search.
else if ErrorLevel = 1
    MsgBox Icon could not be found on the screen.
else
    MsgBox The icon was found at %FoundX%x%FoundY%.
    
por 21.05.2018 / 16:17