autohotkey 使用 return 值 imagesearch 并单击

autohotkey use a return value imagesearch and click

我有一个函数:

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)

我似乎不知道如何让它发送数字而不是文本。

我们在这里看到的是对遗留语法的误用,也可能是无意的使用。 让我们看看这两行:

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 语句,请使用 if ().