Ajuda com um Script Topic is solved

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

Moderator: Gio

guiguiiz
Posts: 15
Joined: 22 Feb 2019, 10:56

Ajuda com um Script

Post by guiguiiz » 22 Jan 2020, 09:09

Bom é o seguinte, eu preciso que o comando "imagesearch" procure em um determinado local da tela , tipo, um quadrado em volta do mouse, porém eu quero pegar a posição do mouse com uma hotkey, e depois o "imagesearch" procure e volta do mouse e nao na tela inteira, pois a imagem que eu procuro é um especie de um gif... Segue o meu Codigo:

Code: Select all

#SingleInstance, Force
#Persistent
CoordMode, Screen, Mouse 
o::
MouseGetPos, StartX, StartY
return
i::
MouseMove, StartX-25, StartY-30 
return
p::
Label1:
MouseMove, %StartX%, %StartY%
    Sleep, 1000
    Send, {Ins}
    Click, Left
Loop
{
    ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, Burbles5.png
    if (ErrorLevel = 0)
    {
        Send, {Ins}
        Sleep, 500
Break
    }
}
Sleep, 200
gosub Label1
Return

F1::
ExitApp
User avatar
Gio
Posts: 1115
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Ajuda com um Script

Post by Gio » 22 Jan 2020, 09:51

Bom dia Guiguiz.

As coordenadas X e Y são valores numéricos, então tudo que você precisa fazer para criar uma quadrado ao redor de uma coordenada é usar a matemática para calcular duas coordenadas novas: a primeira mais à esquerda e acima do que a original, e a segunda mais à direita e abaixo do que a original.

A coordenada horizontal é a coordenada X, e ela cresce da esquerda para a direita da tela (indo do 0 até a resolução horizontal máxima da tela). Já a coordenada Vertical é a coordenada Y, e ela cresce de cima para baixo da tela (indo do 0 até a resolução vertical máxima da tela).

Logo, se você quiser criar um quadrado 100 x 100 cujo centro seja a coordenada XY do mouse, você deve:

1. Subtrair 50 da coordenada X do mouse: Essa será a coordenada X do canto superior-esquerdo do quadrado (X1).
2. Subtrair 50 da coordenada Y do mouse: Essa será a coordenada Y do canto superior-esquerdo do quadrado (Y1).
3. Adicionar 50 à coordenada X do mouse: Essa será a coordenada X do canto inferior-direito do quadrado (X2).
4. Adicionar 50 à coordenada Y do mouse: Essa será a coordenada Y do canto inferior-direito do quadrado (Y2).

Code: Select all

#SingleInstance, Force
#Persistent
CoordMode, Screen, Mouse 
o::
MouseGetPos, StartX, StartY
return
i::
MouseMove, StartX-25, StartY-30 
return
p::
Label1:
MouseMove, %StartX%, %StartY%
    Sleep, 1000
    Send, {Ins}
    Click, Left
Loop
{
    NOVO_X1 := StartX - 50
	NOVO_Y1 := StartY - 50
	NOVO_X2 := StartX + 50
	NOVO_Y2 := StartY + 50
	
	ImageSearch, FoundX, FoundY, %NOVO_X1%, %NOVO_Y1%, %NOVO_X2%, %NOVO_Y2%, Burbles5.png ; Procura no quadrado 100 x 100 cujo centro é a posição do mouse obtida quando chamou a hotkey o.
	
    if (ErrorLevel = 0)
    {
        Send, {Ins}
        Sleep, 500
Break
    }
}
Sleep, 200
gosub Label1
Return

F1::
ExitApp
guiguiiz
Posts: 15
Joined: 22 Feb 2019, 10:56

Re: Ajuda com um Script

Post by guiguiiz » 22 Jan 2020, 12:40

Obrigado Gio, Ajudou mt, consegui fazer oque queria , porém com a função imagesearch não deu muito certo por causa que se trata de um gif, mas usando essa função que você ensinou consegui utilizar o pixelsearch... Muito Obg
guiguiiz
Posts: 15
Joined: 22 Feb 2019, 10:56

Re: Ajuda com um Script

Post by guiguiiz » 24 Jan 2020, 08:02

Gio, estou com um pequeno problema, para min talvez, eu preciso que o "mousemove" movimente o mouse exatamente em cima do Pixel que eu determinei, será possível isso?

Segue o Código, eu realmente não sei como fazer isso... ;x

Code: Select all

  POS_X1 := PosX-115
  POS_Y1 := PosY-120
  POS_X2 := PosX+115
  POS_Y2 := PosY+250

  PixelSearch, FoundX, FoundY, %POS_X1%, %POS_Y1%, %POS_X2%, %POS_Y2%, 0xD03800, 0, Fast RGB
  if (ErrorLevel = 0)
  {
    MouseMove, (Até a cordeenada do PixelSearch)
O pixel em questão é esse (0xD03800). Obg desde já.
User avatar
Gio
Posts: 1115
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Ajuda com um Script  Topic is solved

Post by Gio » 27 Jan 2020, 10:23

Bom dia Guiguiz.

O comando MouseMove e o comando PixelSerach utilizam configurações de coordenadas diferentes, ambas controláveis através do comando CoordMode. Assim, é possível que um comando esteja indicando a coordenada em relação à tela do computador, e o outro em relação à janela atualmente ativa. Para resolver isso, ajuste o CoordMode para Screen em ambos os casos logo antes dos comandos.

Code: Select all

CoordMode, Mouse, Screen
CoordMode, Pixel, Screen

Depois disso basta inferir que a coordenada encontrada pelo PixelSearch deve ser alimentada ao comando MouseMove.

Code: Select all

  POS_X1 := PosX-115
  POS_Y1 := PosY-120
  POS_X2 := PosX+115
  POS_Y2 := PosY+250

  CoordMode, Pixel, Screen
  PixelSearch, FoundX, FoundY, %POS_X1%, %POS_Y1%, %POS_X2%, %POS_Y2%, 0xD03800, 0, Fast RGB
  if (ErrorLevel = 0)
  {
    CoordMode, Mouse, Screen
    MouseMove, %FoundX%, %FoundY%
guiguiiz
Posts: 15
Joined: 22 Feb 2019, 10:56

Re: Ajuda com um Script

Post by guiguiiz » 30 Jan 2020, 13:57

Gio, Boa tarde , ótimo sua explicação agradeço , tenho mais duvidas, teria como eu fazer com que o mouse clicasse randomicamente em uma especie de quadrado?
User avatar
Gio
Posts: 1115
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Ajuda com um Script

Post by Gio » 30 Jan 2020, 18:32

Boa tarde Guiguiz.

Você pode usar o comando Random para escolher números pseudo-aleatórios entre um número máximo e um mínimo.

Por exemplo, se você quiser escolher um número pseudo-aleatório entre 50 e 100 e exibi-lo em uma caixa de mensagem, você faria assim:

Code: Select all

Random, NUMERO_ESCOLHIDO, 50, 100
msgbox % NUMERO_ESCOLHIDO
No caso da obtenção de uma "coordenada XY aleatória" (que seria a tal posição aleatória dentro de uma área especifica da tela) você só precisa usar o comando Random para escolher um X entre o X do ponto superior-esquerdo da área específica da tela e o X do ponto inferior-direito e depois usar de novo o comando Random para escolher um Y entre o Y do ponto superior-esquerdo da área específica da tela e o Y do ponto inferior-direito.

:arrow: Pense um pouco, se as coordenadas do ponto superior-esquerda da área específica forem X = 120 e Y = 200, e se as coordenadas do ponto inferior-direito da área específica forem X = 250 e Y = 300, então qualquer ponto onde o X for entre 120 e 250 e o Y for entre 200 e 300 cairá dentro da área específica.

Na imagem abaixo é possível ver essa situação: não existe posição X maior que 250 e nem menor que 120 que caia dentro da área. Da mesma forma, não existe posição Y menor que 200 ou maior que 300 que caia dentro da área. Outra constatação: Qualquer posição XY cujo X esteja entre 120 e 250 e o Y esteja entre 200 e 300 (ao mesmo tempo) cairá dentro da área (exemplos em amarelo).
COORDENADAS AREA.png
COORDENADAS AREA.png (7.46 KiB) Viewed 1641 times

Assim, para encontrar uma posição aleatória dentro dessa área específica:

Code: Select all

Random, X_ALEATORIO, 120, 250
Random, Y_ALEATORIO, 200, 300
msgbox, 0, Exemplo, Posição aleatória dentro da area exemplo: X%X_ALEATORIO% Y%Y_ALEATORIO%.
guiguiiz
Posts: 15
Joined: 22 Feb 2019, 10:56

Re: Ajuda com um Script

Post by guiguiiz » 31 Jan 2020, 06:55

Bom dia gio, ótima explicação porém tenho uma dúvida.
Eu teria que usar vários comandos randons para que ele clicasse em várias diferentes posições, ou eu só teria que colocar as extremidades das coordenadas?

Grato desde já.
guiguiiz
Posts: 15
Joined: 22 Feb 2019, 10:56

Re: Ajuda com um Script

Post by guiguiiz » 31 Jan 2020, 06:58

Outra coisa que não entendi muito bem foi X_aleatório é o y_aleatório, eu preciso determinar em qual posição vai clicar ou eles anatomicamente faz isso sozinho?
User avatar
Gio
Posts: 1115
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Ajuda com um Script

Post by Gio » 31 Jan 2020, 10:11

Bom dia.
Eu teria que usar vários comandos randons para que ele clicasse em várias diferentes posições, ou eu só teria que colocar as extremidades das coordenadas?
Não entendi muito bem o que você quiz dizer. Diferentes posições dentro da mesma área[1] ou diferentes posições em áreas diferentes[2]?

Caso [1]: O comando Random sorteia novamente os números sempre que for chamado. Sendo assim, se for colocado dentro de uma hotkey, por exemplo, ele vai sortear números diferentes sempre que a hotkey for chamada. Use as ferramentas de loop, hotkeys, objetos e funções para que você não precise escrever muitas linhas do comando.

:arrow: O script abaixo implementa uma hotkey na tecla F2. Sempre que você a aperta, ele move o mouse para uma posição aleatória no quadrado 100 x 100 central à sua tela.

Code: Select all

; PRIMEIRO, CALCULAMOS O QUADRADO 100 X 100 CENTRAL DA SUA TELA.
POSICAO_CENTRAL_X := A_ScreenWidth / 2
POSICAO_CENTRAL_Y := A_ScreenHeight / 2

X1 := POSICAO_CENTRAL_X - 50
Y1 := POSICAO_CENTRAL_Y - 50
X2 := POSICAO_CENTRAL_X  + 50
Y2 := POSICAO_CENTRAL_Y + 50
Return


; DEPOIS, BASTA QUE A HOTKEY RODE O RANDOM 2X SEMPRE QUE FOR CHAMADA (uma para o X e outra para o Y).
F2::
Random, X_ALEATORIO, %X1%, %X2%
Random, Y_ALEATORIO, %Y1%, %Y2%
CoordMode, Mouse, Screen
MouseMove, %X_ALEATORIO%, %Y_ALEATORIO%
Return
:arrow: Rode o script acima e depois aperte o F2 várias e várias vezes. Veja como o mouse se move para posições aleatórias dentro do quadrado 100 x 100 do centro da sua tela.


Caso [2]: Se você estiver falando de áreas em diferentes posições da tela, eu sugiro usar uma função global ou com variáveis byref para criar os 2 números aleatórios. Assim, você pode escrever apenas uma linha nova para cada área nova a ser implementada.

:arrow: O código abaixo implementa 3 áreas 100x100 de movimento do mouse. Uma fica no centro (F2), outra fica no canto superior-esquerdo (F3) e a outra fica no canto superior-esquerdo (F4). Aperte repetidas vezes o F2 e veja a primeira área, depois aperte repetidas vezes o F3 para ver a segunda área, e então depois aperte repetidas vezes o F4 para ver a terceira área. Veja que para cada nova área, só foi preciso escrever 1 nova linha de código: a de chamada à função ALEATORIO().

Code: Select all

F2::
ALEATORIO(((A_ScreenWidth / 2) - 50), ((A_ScreenHeight / 2) - 50), ((A_ScreenWidth / 2)  + 50),  ((A_ScreenHeight / 2) + 50))
CoordMode, Mouse, Screen
MouseMove, %X_ALEATORIO%, %Y_ALEATORIO%
Return

F3::
ALEATORIO(0, 0, 100, 100)
CoordMode, Mouse, Screen
MouseMove, %X_ALEATORIO%, %Y_ALEATORIO%
Return

F4::
ALEATORIO(A_ScreenWidth - 100, 0, A_ScreenWidth, (A_ScreenHeight - (A_ScreenHeight - 100)))
CoordMode, Mouse, Screen
MouseMove, %X_ALEATORIO%, %Y_ALEATORIO%
Return


ALEATORIO(X_MINIMO, Y_MINIMO, X_MAXIMO, Y_MAXIMO)
{
	Global
	Random, X_ALEATORIO, %X_MINIMO%, %X_MAXIMO%
	Random, Y_ALEATORIO, %Y_MINIMO%, %Y_MAXIMO%
}
Return

:arrow: Tente entender a matemática usada, pois ela demonstra como se calculam as posições na tela. As variáveis A_ScreenWidth e A_ScreenHeight são variáveis embutidas e contém respectivamente a resolução horizontal e a resolução vertical atual da tela do seu computador.

Outra coisa que não entendi muito bem foi X_aleatório é o y_aleatório, eu preciso determinar em qual posição vai clicar ou eles anatomicamente faz isso sozinho?
Veja a imagem que eu postei. O X_Aleatório e o X_Aleatório fazem juntos uma coordenada XY válida que sempre estará dentro da área indicada. Uma vez obtidas essas variáveis do comando Random, basta usá-las diretamente no comando click (do mesmo jeito em que eu mostrei com o comando MouseMove acima). Lembre-se apenas que as variáveis precisam ser dereferenciadas para que somente os seus valores entrem no comando (faça isso usando os percentuais, da mesma forma que fiz acima).
guiguiiz
Posts: 15
Joined: 22 Feb 2019, 10:56

Re: Ajuda com um Script

Post by guiguiiz » 01 Feb 2020, 10:39

Boa Tarde Gio, Muito obrigado amigo , consegui fazer oque queria, e entendi a maneira como funciona... Muito bom, Eu só tenho dificuldade em achar o pixeis exatos ai preciso ficar testando e testando até encontrar , mas foi uma ótima explicação.
De qualquer forma, muito obrigado. ;D
killingpppp

Re: Ajuda com um Script

Post by killingpppp » 19 Jan 2021, 17:34

Ola Gio Estou tentando fazer com que esse script funcione em uma certa posiçao , por que ele esta funcionando em tela cheia e nao pode em tela cheia tenque ser limitado porque ele nao funciona como eu quero em tela cheia por isso tenque ser limitado mais nao sei fazer isso tipo quero com que ele funcione nessa posiçao (863, 461, 1051, 616) poderia me ajudar?
Aqui Esta O Codigo.

Code: Select all

init:
#NoEnv
#SingleInstance, Force
#Persistent
#InstallKeybdHook
#UseHook
#KeyHistory, 0
#HotKeyInterval 1
#MaxHotkeysPerInterval 127
version = badeverything v0.02


Home::

Pause

Suspend

return


f12:: Hotkey, *~$RButton, Toggle


*~$RButton::

SetKeyDelay,30
SetControlDelay,30
SetMouseDelay,30
SetDefaultMouseSpeed,0
SetWinDelay,30
SendMode, InputThenPlay
SetBatchLines,30
ListLines, Off
CoordMode, Pixel, Screen, RGB
CoordMode, Mouse, Screen
PID := DllCall("GetCurrentProcessId")
Process, Priority, %PID%, High
 
EMCol := 14207652,12628365,11047270,9205844,8677692,6575674,4997421,4602410,3288354,2565149
ColVn := 64
AntiShakeX := (A_ScreenHeight // 160)
AntiShakeY := (A_ScreenHeight // 128)
ZeroX := (A_ScreenWidth // 2) ;dont touch?
ZeroY := (A_ScreenHeight // 2) 
CFovX := (A_ScreenWidth // 15)  ;configure for FOV up = smaller lower= bigger
CFovY := (A_ScreenHeight // 15)
ScanL := ZeroX - CFovX
ScanT := ZeroY
ScanR := ZeroX + CFovX
ScanB := ZeroY + CFovY
NearAimScanL := ZeroX - AntiShakeX
NearAimScanT := ZeroY - AntiShakeY
NearAimScanR := ZeroX + AntiShakeX
NearAimScanB := ZeroY + AntiShakeY

Loop, {
	KeyWait, RButton, D
	PixelSearch, AimPixelX, AimPixelY, NearAimScanL, NearAimScanT, NearAimScanR, NearAimScanB, EMCol, ColVn, Fast RGB
	if (!ErrorLevel=0) {
		loop, 10 {
			PixelSearch, AimPixelX, AimPixelY, ScanL, ScanT, ScanR, ScanB, EMCol, ColVn, Fast RGB
			AimX := AimPixelX - ZeroX
			AimY := AimPixelY - ZeroY
			DirX := -1
			DirY := -1
			If ( AimX > 0 ) {
				DirX := 1
			}
			If ( AimY > 0 ) {
				DirY := 1
			}
			AimOffsetX := AimX * DirX
			AimOffsetY := AimY * DirY
			MoveX := Floor(( AimOffsetX ** ( 1 / 2 ))) * DirX
			MoveY := Floor(( AimOffsetY ** ( 1 / 2 ))) * DirY
			DllCall("mouse_event", uint, 1, int, MoveX * 3.5, int, MoveY, uint, 0, int, 0) ;turing mouse to color were it says * is the speed of the aimbot turn up for unhuman reactions lower for human
		}
	}
}

Pause:: u
return:
goto, init

info:
return
f1::ExitApp
Last edited by gregster on 19 Jan 2021, 17:46, edited 1 time in total.
Reason: Codebox fixed.
Post Reply

Return to “Ajuda e Suporte Geral”