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 ()
.
我有一个函数:
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 ()
.