Цикл х количество раз, с х в качестве параметра, используя AutoHotKey - PullRequest
0 голосов
/ 02 ноября 2019

Я создал небольшую функцию, которая щелкает определенную часть экрана. Он будет использоваться, но кликнул по разному количеству раз по всей программе. Я хотел бы иметь возможность вводить количество кликов в качестве параметра, однако, когда я пытаюсь сделать это, а не жестко кодировать количество циклов, эта часть кода не запускается и экран не щелкается.

Обратите внимание на изменения в функции ClickMainBuilding в определении и как она называется ниже

Вот что работает:

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

; ######## FUNCTIONS ########

ClickMainBuilding(){
    Loop, 5 
    {
        Click, 927, 538 Left, , Down
        Sleep, 250
        Click, 927, 538 Left, , Up
        Sleep, 250
    }
}

ClickTradeDepot(){
    Click, 420, 705
    Sleep, 750
}

ExitTradeDepot(){
    Click, 1512, 129
    Sleep, 750
}

^!u:: ; ### MAIN ###

WinActivate,  ahk_class ThumbnailDeviceHelperWnd
Sleep, 333
WinActivate, BlueStacks ahk_class HwndWrapper[Bluestacks.exe;;5b32fde4-2355-48c5-be51-8927697e9914]
Sleep, 500
ClickMainBuilding()
Sleep, 1000
ClickTradeDepot()
Sleep, 1000
ExitTradeDepot()

Return

Esc::ExitApp  ; Exit script with Escape key

Вот что не работает:

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

; ######## FUNCTIONS ########

ClickMainBuilding(x){
    Loop, x
    {
        Click, 927, 538 Left, , Down
        Sleep, 250
        Click, 927, 538 Left, , Up
        Sleep, 250
    }
}

ClickTradeDepot(){
    Click, 420, 705
    Sleep, 750
}

ExitTradeDepot(){
    Click, 1512, 129
    Sleep, 750
}

^!u:: ; ### MAIN ###

WinActivate,  ahk_class ThumbnailDeviceHelperWnd
Sleep, 333
WinActivate, BlueStacks ahk_class HwndWrapper[Bluestacks.exe;;5b32fde4-2355-48c5-be51-8927697e9914]
Sleep, 500
ClickMainBuilding(5)
Sleep, 1000
ClickTradeDepot()
Sleep, 1000
ExitTradeDepot()

Return

Esc::ExitApp  ; Exit script with Escape key

1 Ответ

1 голос
/ 02 ноября 2019

Loop принимает в качестве первого параметра количество раз, которое необходимо повторить. Если вы введете 5, то AHK преобразует это 5 в целое число, а затем итерирует 5 раз.

В своем коде вы написали Loop, x, что говорит AHK зациклить всего * 1007. * раз. Однако в отличие от 5, x не может быть преобразовано в целое число, поэтому AHK, вероятно, выдаст ошибку. Чтобы указать переменную x и вместо этого использовать ее значение в качестве количества итераций, необходимо указать, что этот конкретный x на самом деле является переменной. Вы можете сделать это так:

; BOTH OF THESE EXAMPLES WORK

; Legacy
Loop, %x%

; Newest
Loop, % x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...