autohotkey используйте возвращаемое значение imagesearch и нажмите - PullRequest
0 голосов
/ 18 января 2020

У меня есть функция:

NormalRand(x,y,int=1) {
Loop 12
{
    Random, var,0.0,1
    Num+=var
    }
    norm := (int) ? Round((y+x)/2+((Num-6)*(y-x))/6) : (y+x)/2+((Num-6)*(y-x))/6
    Return norm < x ? x : norm > y ? y : norm

}

У меня есть поиск изображений:

ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenWidth, *50 Okay.jpg
If ErrorLevel = 0
{
    xCord = NormalRand(%FoundX%-10,%FoundX%+10)
    yCord = NormalRand(%FoundY%-10,%FoundY%+10)
    MsgBox, 4,, Found the image at %xCord% %yCord%
    Click, %xCord%, %yCord% Left, 1
    Sleep, 2000
}

Я пытаюсь использовать функцию NormalRand для распределения моих кликов вокруг кнопок, чтобы их было сложнее обнаружить в программе, с которой я буду использовать это. Однако, когда я пытаюсь отправить шнуры на click, это не работает. Когда я проверяю его с помощью msgbox, я получаю этот вывод Found the image at NormalRand(391-10,391+10) NormalRand(676-10,676+10)

Я не могу понять, как заставить его отправлять числа вместо текста.

1 Ответ

1 голос
/ 18 января 2020

То, что мы имеем здесь, это неправильное использование и, возможно, также непреднамеренное использование устаревшего синтаксиса. Давайте посмотрим на эти две строки:

xCord = NormalRand(%FoundX%-10,%FoundX%+10)
yCord = NormalRand(%FoundY%-10,%FoundY%+10)

Вы фактически присваиваете текст этим переменным, а не вызываете функцию. Посмотрите это в качестве примера:

xCord = NormalRand(%FoundX%-10,%FoundX%+10)
yCord = NormalRand(%FoundY%-10,%FoundY%+10)

MsgBox, % xCord "`n" yCord

Для унаследованного синтаксиса вы правильно ссылаетесь на переменные FoundX и FoundY, заключая их в %, но вы не делаете этого для имени функции.
Таким образом, в устаревшем синтаксисе вы должны сделать это:

xCord = %NormalRand%(%FoundX%-10,%FoundX%+10)
yCord = %NormalRand%(%FoundY%-10,%FoundY%+10)

Однако, пожалуйста, прекратите использовать устаревший синтаксис. Он настолько древний, плохой и сильно отличается от других языков программирования, с которыми вы, возможно, сталкивались.
Синтаксис выражений - это то, что вы хотите использовать, поэтому вместо устаревшего = мы используем :=, чтобы назначить выражение для наши переменные. (= никогда не используется!)
В синтаксисе выражений ваши вызовы функций выглядят нормально и красиво:

xCord := NormalRand(FoundX-10, FoundX+10)
yCord := NormalRand(FoundY-10, FoundY+10)

И чтобы еще больше проповедовать о унаследованном синтаксисе, вы также используете его в Условный оператор. Чтобы не использовать устаревшее if-выражение, используйте if ().

...