Ajuda com script em segundo plano

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

Moderator: Gio

DiegoSouto
Posts: 25
Joined: 01 Apr 2021, 09:51

Ajuda com script em segundo plano

Post by DiegoSouto » 09 Dec 2024, 21:51

preciso de ajuda to tentando fazer envio de acões do mouse e teclado para uma tela em segundo plano porem nao consigo de nenhuma forma ja refiz o codigo varias vezes mais nada ta dando certo ja usei chatgpt mais nem ele consegue entender o pq de nao esta funcionando

quando o scrip envia o click para tela especifica ele nao manda click no local que definir ele envia apenas onde o mouse fisico esta posicionado na tela

Code: Select all

; Configuração para coordenadas e resolução da tela
SetDefaultMouseSpeed, 0
SetMouseDelay, 10
#SingleInstance, Force

; Variáveis globais para coordenadas e número de bags
global hwnd, base_x, base_y, offset, num_bags

; Função para capturar o HWND da janela
GetWindowHandle() {
    WinGet, hwnd, ID, otPokemon | Noob - Master Jr
    if (!hwnd) {
        MsgBox, Não foi possível encontrar a janela "otPokemon | Noob - Master Jr"
        ExitApp
    }
    return hwnd
}

; Função para calcular coordenadas de Berrypot
GetBerryPotCoords(row, col) {
    global base_x, base_y, offset
    x := base_x + (col - 1) * offset
    y := base_y + (row - 1) * offset
    return [x, y]
}

; Função para definir coordenadas baseado na resolução
SetResolution(resolution) {
    if (resolution = "1366x768") {
        base_x := 1193
        base_y := 98
        offset := 34
    } else if (resolution = "1920x1080") {
        base_x := 1747
        base_y := 98
        offset := 34
    }
}

; Função para enviar clique virtual
PostClick(hwnd, x, y) {
    lParam := (y << 16) | (x & 0xFFFF)  ; Combina x e y em um único número
    DllCall("user32.dll\PostMessage", "Ptr", hwnd, "UInt", 0x201, "Ptr", 0, "Ptr", lParam) ; WM_LBUTTONDOWN (0x201)
    DllCall("user32.dll\PostMessage", "Ptr", hwnd, "UInt", 0x202, "Ptr", 0, "Ptr", lParam) ; WM_LBUTTONUP (0x202)
}

; Função para enviar teclas
PostKey(hwnd, key) {
    vk := GetKeyVK(key)  ; Obtém o código virtual da tecla
    sc := GetKeySC(key)  ; Obtém o código de scan da tecla
    DllCall("user32.dll\PostMessage", "Ptr", hwnd, "UInt", 0x100, "Ptr", vk, "Ptr", (sc << 16)) ; WM_KEYDOWN (0x100)
    DllCall("user32.dll\PostMessage", "Ptr", hwnd, "UInt", 0x101, "Ptr", vk, "Ptr", (sc << 16)) ; WM_KEYUP (0x101)
}

; Inicialização da interface para escolher a resolução e número de bags
F1::
Gui, Add, Text,, Selecione a resolução da tela:
Gui, Add, Radio, vRes1366 Checked, 1366x768
Gui, Add, Radio, vRes1920, 1920x1080
Gui, Add, Text,, Quantidade de bags para abrir:
Gui, Add, Edit, vNumBags, 32  ; Caixa de texto com valor padrão "32"
Gui, Add, Button, gSubmitResolution, Confirmar
Gui, +AlwaysOnTop -MinimizeBox -MaximizeBox
Gui, Show, w170 h135,, Escolher Resolução e Bags
return

SubmitResolution:
Gui, Submit, NoHide
if (Res1366) {
    SetResolution("1366x768")
} else if (Res1920) {
    SetResolution("1920x1080")
}

if (NumBags = "" or NumBags <= 0) {
    MsgBox, Por favor, insira um número válido de bags.
    return
}

num_bags := NumBags
Gui, Destroy

; Capturar o HWND
hwnd := GetWindowHandle()

; Calcular coordenadas para os berrypots
berrypots := []
Loop 4 {
    row := A_Index
    Loop 5 {
        col := A_Index
        berrypots.Push(GetBerryPotCoords(row, col))
    }
}

row := 5
Loop 3 {
    col := A_Index
    berrypots.Push(GetBerryPotCoords(row, col))
}

bag := GetBerryPotCoords(5, 4)

click_interval := 300
double_click_interval := 300

; Loop para abrir bags
Loop %num_bags%
{
    for i, coords in berrypots {
        ; Colher Apricorns
        Loop 4 {
            PostClick(hwnd, coords[1], coords[2])  ; Clique direito
            Sleep, %click_interval%
        }

        ; Plantar Apricorns
        PostKey(hwnd, "5")  ; Seleciona o item 5
        Sleep, %click_interval%

        PostClick(hwnd, coords[1], coords[2])  ; Clique esquerdo
        Sleep, %double_click_interval%
    }

    ; Abrir a bag
    PostClick(hwnd, bag[1], bag[2])  ; Clique direito na bag
    Sleep, 1000
}

ExitApp

; Atalho para interromper a macro
F2::ExitApp

User avatar
Encrypton
Posts: 38
Joined: 10 Feb 2022, 15:21
Contact:

Re: Ajuda com script em segundo plano

Post by Encrypton » 10 Dec 2024, 17:57

Code: Select all

; Configuração para coordenadas e resolução da tela
SetDefaultMouseSpeed, 0
SetMouseDelay, 10
#SingleInstance, Force

; Variáveis globais para coordenadas e número de bags
global hwnd, base*x, base*y, offset, num_bags

; Função para capturar o HWND da janela
GetWindowHandle() {
    WinGet, hwnd, ID, otPokemon | Noob - Master Jr
    if (!hwnd) {
        MsgBox, Não foi possível encontrar a janela "otPokemon | Noob - Master Jr"
        ExitApp
    }
    return hwnd
}

; Função para calcular coordenadas de Berrypot
GetBerryPotCoords(row, col) {
    global base*x, base*y, offset
    x := base_x + (col - 1) * offset
    y := base_y + (row - 1) * offset
    return [x, y]
}

; Função para definir coordenadas baseado na resolução
SetResolution(resolution) {
    if (resolution = "1366x768") {
        base_x := 1193
        base_y := 98
        offset := 34
    } else if (resolution = "1920x1080") {
        base_x := 1747
        base_y := 98
        offset := 34
    }
}

; Função para enviar clique virtual usando ControlClick
SendControlClick(hwnd, x, y) {
    ControlClick, x%x% y%y%, ahk_id %hwnd%
}

; Função para enviar teclas usando ControlSend
SendControlKey(hwnd, key) {
    ControlSend,, {%key%}, ahk_id %hwnd%
}

; Inicialização da interface para escolher a resolução e número de bags
F1::
Gui, Add, Text,, Selecione a resolução da tela:
Gui, Add, Radio, vRes1366 Checked, 1366x768
Gui, Add, Radio, vRes1920, 1920x1080
Gui, Add, Text,, Quantidade de bags para abrir:
Gui, Add, Edit, vNumBags, 32  ; Caixa de texto com valor padrão "32"
Gui, Add, Button, gSubmitResolution, Confirmar
Gui, +AlwaysOnTop -MinimizeBox -MaximizeBox
Gui, Show, w170 h135,, Escolher Resolução e Bags
return

SubmitResolution:
Gui, Submit, NoHide
if (Res1366) {
    SetResolution("1366x768")
} else if (Res1920) {
    SetResolution("1920x1080")
}
if (NumBags = "" or NumBags <= 0) {
    MsgBox, Por favor, insira um número válido de bags.
    return
}
num_bags := NumBags
Gui, Destroy
; Capturar o HWND
hwnd := GetWindowHandle()
; Calcular coordenadas para os berrypots
berrypots := []
Loop 4 {
    row := A_Index
    Loop 5 {
        col := A_Index
        berrypots.Push(GetBerryPotCoords(row, col))
    }
}
row := 5
Loop 3 {
    col := A_Index
    berrypots.Push(GetBerryPotCoords(row, col))
}
bag := GetBerryPotCoords(5, 4)
click_interval := 300
double*click*interval := 300
; Loop para abrir bags
Loop %num_bags%
{
    for i, coords in berrypots {
        ; Colher Apricorns
        Loop 4 {
            SendControlClick(hwnd, coords[1], coords[2])  ; Clique no local das coordenadas
            Sleep, %click_interval%
        }
        ; Plantar Apricorns
        SendControlKey(hwnd, "5")  ; Seleciona o item 5
        Sleep, %click_interval%
        SendControlClick(hwnd, coords[1], coords[2])  ; Clique esquerdo
        Sleep, %double*click*interval%
    }
    ; Abrir a bag
    SendControlClick(hwnd, bag[1], bag[2])  ; Clique direito na bag
    Sleep, 1000
}
ExitApp

; Atalho para interromper a macro
F2::ExitApp

DiegoSouto
Posts: 25
Joined: 01 Apr 2021, 09:51

Re: Ajuda com script em segundo plano

Post by DiegoSouto » 10 Dec 2024, 18:22

Encrypton wrote:
10 Dec 2024, 17:57

Code: Select all

; Configuração para coordenadas e resolução da tela
SetDefaultMouseSpeed, 0
SetMouseDelay, 10
#SingleInstance, Force

; Variáveis globais para coordenadas e número de bags
global hwnd, base*x, base*y, offset, num_bags

; Função para capturar o HWND da janela
GetWindowHandle() {
    WinGet, hwnd, ID, otPokemon | Noob - Master Jr
    if (!hwnd) {
        MsgBox, Não foi possível encontrar a janela "otPokemon | Noob - Master Jr"
        ExitApp
    }
    return hwnd
}

; Função para calcular coordenadas de Berrypot
GetBerryPotCoords(row, col) {
    global base*x, base*y, offset
    x := base_x + (col - 1) * offset
    y := base_y + (row - 1) * offset
    return [x, y]
}

; Função para definir coordenadas baseado na resolução
SetResolution(resolution) {
    if (resolution = "1366x768") {
        base_x := 1193
        base_y := 98
        offset := 34
    } else if (resolution = "1920x1080") {
        base_x := 1747
        base_y := 98
        offset := 34
    }
}

; Função para enviar clique virtual usando ControlClick
SendControlClick(hwnd, x, y) {
    ControlClick, x%x% y%y%, ahk_id %hwnd%
}

; Função para enviar teclas usando ControlSend
SendControlKey(hwnd, key) {
    ControlSend,, {%key%}, ahk_id %hwnd%
}

; Inicialização da interface para escolher a resolução e número de bags
F1::
Gui, Add, Text,, Selecione a resolução da tela:
Gui, Add, Radio, vRes1366 Checked, 1366x768
Gui, Add, Radio, vRes1920, 1920x1080
Gui, Add, Text,, Quantidade de bags para abrir:
Gui, Add, Edit, vNumBags, 32  ; Caixa de texto com valor padrão "32"
Gui, Add, Button, gSubmitResolution, Confirmar
Gui, +AlwaysOnTop -MinimizeBox -MaximizeBox
Gui, Show, w170 h135,, Escolher Resolução e Bags
return

SubmitResolution:
Gui, Submit, NoHide
if (Res1366) {
    SetResolution("1366x768")
} else if (Res1920) {
    SetResolution("1920x1080")
}
if (NumBags = "" or NumBags <= 0) {
    MsgBox, Por favor, insira um número válido de bags.
    return
}
num_bags := NumBags
Gui, Destroy
; Capturar o HWND
hwnd := GetWindowHandle()
; Calcular coordenadas para os berrypots
berrypots := []
Loop 4 {
    row := A_Index
    Loop 5 {
        col := A_Index
        berrypots.Push(GetBerryPotCoords(row, col))
    }
}
row := 5
Loop 3 {
    col := A_Index
    berrypots.Push(GetBerryPotCoords(row, col))
}
bag := GetBerryPotCoords(5, 4)
click_interval := 300
double*click*interval := 300
; Loop para abrir bags
Loop %num_bags%
{
    for i, coords in berrypots {
        ; Colher Apricorns
        Loop 4 {
            SendControlClick(hwnd, coords[1], coords[2])  ; Clique no local das coordenadas
            Sleep, %click_interval%
        }
        ; Plantar Apricorns
        SendControlKey(hwnd, "5")  ; Seleciona o item 5
        Sleep, %click_interval%
        SendControlClick(hwnd, coords[1], coords[2])  ; Clique esquerdo
        Sleep, %double*click*interval%
    }
    ; Abrir a bag
    SendControlClick(hwnd, bag[1], bag[2])  ; Clique direito na bag
    Sleep, 1000
}
ExitApp

; Atalho para interromper a macro
F2::ExitApp
Nao consegui usar esse codigo ta dando um erro

Post Reply

Return to “Ajuda e Suporte Geral”