Ajuda com meu Script Topic is solved

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

Moderator: Gio

Evoked
Posts: 2
Joined: 06 Jul 2020, 10:34

Ajuda com meu Script

06 Jul 2020, 10:43

olá, eu criei esse codigo para um jogo. esse script fica apertando Ctrl + B a cada um segundo, e depois clicka nos locais de coordenadas do mouse que eu salvei.

Code: Select all

; script macro universal

; Jones

#NoEnv
SetWorkingDir %A_ScriptDir%
CoordMode, Mouse, Window
SendMode Input
#SingleInstance Force
SetTitleMatchMode 2
#WinActivateForce
SetControlDelay 1
SetWinDelay 0
SetKeyDelay -1
SetMouseDelay -1
SetBatchLines -1

Gui Color, 0x000000
Gui Font, c0xB4BD02
Gui, Add, Text, x20 y75 w75 h20 +0x200 +center, Pause F12
Gui, Add, Text, x20 y45 w75 h20 +0x200 +center, Start F10
Gui Add, Text, x20 y16 w95 h23 +0x200 +center, Simple Bomb Script: 
Gui Show, w150 h140,V.01

; UserGlobalVars

F10::
Macro1:
Loop
{
   WinSet, AlwaysOnTop, Toggle, Current Window_Dx_Window_Class
   Send, {LControl Down}
   Send, {b}
   Sleep, 1000
   Click, 878, 568 Left, 1
   Sleep, 1000
   Click, 1137, 824 Left, 1
   Sleep, 1000
   Click, 958, 802 Left, 1
   Sleep, 1000
   Click, 856, 569 Left, 1
   Sleep, 1000
}
Return


F8::ExitApp

F12::

Pause

Suspend

return
um amigo me disse se eu por esse codigo no meu script, consigo rodar o jogo (Trove.exe) minimizado que o script funciona corretamente...
como faço isso?
aqui o codigo que ele postou

Code: Select all

BackgroundClick(x, y, messageDelay, PID) {

lParam := x | (y << 16)

SendMessage, 0x006, 00000002, 00000000, , ahk_pid %PID% ;ACTIVE
PostMessage, 0x200, 00000001, %lParam%, , ahk_pid %PID% ;MOUSEMOVE

PostMessage, 0x201, 0x00120BD6, 0x01D80041, , ahk_pid %PID% ;LBUTTONDOWN
Sleep, %messageDelay%
PostMessage, 0x202, 0x00120BD6, 0x01D80041, , ahk_pid %PID% ;LBUTTONUP

return
}

BackgroundClickDrag(startX, startY, endX, endY, messageDelay, PID) {
;MessageDelay is used twice because we are using 3 messages that use the mouse

lParam := startX | (startY << 16)

SendMessage, 0x006, 00000002, 00000000, , ahk_pid %PID% ;ACTIVE

PostMessage, 0x200, 00000001, %lParam%, , ahk_pid %PID% ;MOUSEMOVE

PostMessage, 0x201, 00000001, %lParam%, , ahk_pid %PID% ;LBUTTONDOWN
Sleep, %messageDelay%
lParam := endX | (endY << 16)
PostMessage, 0x200, 0x0001, %lParam%, , ahk_pid %PID% ;MOUSEMOVE
Sleep, %messageDelay%
PostMessage, 0x202, 00000000, 02020001, , ahk_pid %PID% ;LBUTTONUP

return
}
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Ajuda com meu Script

07 Jul 2020, 19:04

Bom dia Evoked.

Pelo que entendi do código que você postou, ele implementa duas funções que enviam mensagens de janela do tipo "clique do mouse" para janelas alvo. Essas funções sabem qual para qual janela enviar as mensagens a partir do ID do processo que criou essas janelas (que você deve fornecer na chamada à função).

A primeira função parece ser para enviar cliques normais, e a segunda parece ser para enviar cliques com arrastar do mouse.

Logo, o que você teria que fazer para implementá-las seria descobrir o ID do processo alvo (pode ser obtido através do comando Process com o paramêtro Exist e o nome do processo alvo quando este processo estiver em execução na máquina), e depois colocar os restante das informações em chamadas às funções que você postou.

Parâmetros:

1. x -> coordenada x do clique.
2. y -> coordenada y do clique.
3. messageDelay -> tempo de pausa entre os cliques (milisegundos).
4. PID -> o ID do processo alvo, que como disse, pode ser obtido através do comando Process.


OBS: Não testei as funções, quem disse que elas funcionam foi o seu amigo, eu apenas interpretei o código. Mas acredito que funcionem sim. Se não funcionarem, sugiro colocar as janelas em segundo plano ao invés de minimizar.
Evoked
Posts: 2
Joined: 06 Jul 2020, 10:34

Re: Ajuda com meu Script

07 Jul 2020, 20:28

Gio wrote:
07 Jul 2020, 19:04
Bom dia Evoked.

Pelo que entendi do código que você postou, ele implementa duas funções que enviam mensagens de janela do tipo "clique do mouse" para janelas alvo. Essas funções sabem qual para qual janela enviar as mensagens a partir do ID do processo que criou essas janelas (que você deve fornecer na chamada à função).

A primeira função parece ser para enviar cliques normais, e a segunda parece ser para enviar cliques com arrastar do mouse.

Logo, o que você teria que fazer para implementá-las seria descobrir o ID do processo alvo (pode ser obtido através do comando Process com o paramêtro Exist e o nome do processo alvo quando este processo estiver em execução na máquina), e depois colocar os restante das informações em chamadas às funções que você postou.

Parâmetros:

1. x -> coordenada x do clique.
2. y -> coordenada y do clique.
3. messageDelay -> tempo de pausa entre os cliques (milisegundos).
4. PID -> o ID do processo alvo, que como disse, pode ser obtido através do comando Process.


OBS: Não testei as funções, quem disse que elas funcionam foi o seu amigo, eu apenas interpretei o código. Mas acredito que funcionem sim. Se não funcionarem, sugiro colocar as janelas em segundo plano ao invés de minimizar.
entendi, o processo é esse "Trove.exe", agora a duvira principal era unir os 2 script em 1 unico.

no caso ficaria assim?

Code: Select all

; script macro universal

; Jones

#NoEnv
SetWorkingDir %A_ScriptDir%
CoordMode, Mouse, Window
SendMode Input
#SingleInstance Force
SetTitleMatchMode 2
#WinActivateForce
SetControlDelay 1
SetWinDelay 0
SetKeyDelay -1
SetMouseDelay -1
SetBatchLines -1

Gui Color, 0x000000
Gui Font, c0xB4BD02
Gui, Add, Text, x20 y75 w75 h20 +0x200 +center, Pause F12
Gui, Add, Text, x20 y45 w75 h20 +0x200 +center, Start F10
Gui Add, Text, x20 y16 w95 h23 +0x200 +center, Simple Bomb Script: 
Gui Show, w150 h140,V.01

; UserGlobalVars

F10::
Macro1:
Loop
{
   WinSet, AlwaysOnTop, Toggle, Current Window_Dx_Window_Class
   Send, {LControl Down}
   Send, {b}
   Sleep, 1000
   Click, 878, 568 Left, 1
   Sleep, 1000
   Click, 1137, 824 Left, 1
   Sleep, 1000
   Click, 958, 802 Left, 1
   Sleep, 1000
   Click, 856, 569 Left, 1
   Sleep, 1000
}
Return

F8::ExitApp

F12::

Pause

Suspend

return

BackgroundClick(x, y, messageDelay, PID) {

lParam := x | (y << 16)

SendMessage, 0x006, 00000002, 00000000, , ahk_pid %PID% ;ACTIVE
PostMessage, 0x200, 00000001, %lParam%, , ahk_pid %PID% ;MOUSEMOVE

PostMessage, 0x201, 0x00120BD6, 0x01D80041, , ahk_pid %PID% ;LBUTTONDOWN
Sleep, %messageDelay%
PostMessage, 0x202, 0x00120BD6, 0x01D80041, , ahk_pid %PID% ;LBUTTONUP

return
}

BackgroundClickDrag(startX, startY, endX, endY, messageDelay, PID) {
;MessageDelay is used twice because we are using 3 messages that use the mouse

lParam := startX | (startY << 16)

SendMessage, 0x006, 00000002, 00000000, , ahk_pid %PID% ;ACTIVE

PostMessage, 0x200, 00000001, %lParam%, , ahk_pid %PID% ;MOUSEMOVE

PostMessage, 0x201, 00000001, %lParam%, , ahk_pid %PID% ;LBUTTONDOWN
Sleep, %messageDelay%
lParam := endX | (endY << 16)
PostMessage, 0x200, 0x0001, %lParam%, , ahk_pid %PID% ;MOUSEMOVE
Sleep, %messageDelay%
PostMessage, 0x202, 00000000, 02020001, , ahk_pid %PID% ;LBUTTONUP

return
}
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Ajuda com meu Script  Topic is solved

08 Jul 2020, 09:55

Bom dia.

A proposta das funções é usar o código delas como sendo o método de enviar os cliques automatizados. Sendo assim, o que você deve fazer é configurar chamadas às funções no lugar dos comandos click (além de colocar o corpo das funções embaixo, como você já fez).

Mas para chamar uma função você precisa estar munido de todos os parâmetros necessários, sendo que, no caso da função BackgroundClick(), ela exige quatro parâmetros. Desses quatro, três são simples: o parametro X e o parâmetro Y você já tem (do contrário não seria possível usar o comando click) e o parâmetro messageDelay é uma pausa que você pode escolher à seu gosto (pode ser 50, por exemplo), porém o parâmetro PID, que é o ID do processo, é um número que o Windows atribui a cada processo no momento de sua criação (tipo, você executa um programa e o Windows cria um processo e dá a esse processo um número identificador). Sendo assim, você precisar criar código para coletar o PID do processo alvo antes de chamar a função BackgroundClick(). Para fazer isso, você pode utilizar o comando Process, conforme explicado no post acima.

:arrow: Veja no arquivo de ajuda como configurar o comando Process para coletar o ID do processo alvo e escreva a linha correspondente. Depois, escreva as chamadas à função BackgroundClick() no lugar dos comandos Click.

OBS: Eu não estou dizendo que esse método funciona, pois isso é uma função escrita por terceiros e a responsabilidade sobre ela é do seu desenvolvedor. Estou apenas descrevendo como você faria para usar esse código em seu script.

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 5 guests