我不知道我的 AHK 脚本有什么问题
I Don't Know What the Problem is with my AHK Script
我在这里处理了很多我不熟悉的事情,所以即使在查看文档并尝试修复大约一个小时后我也找不到问题。
目标是从文件中逐个获取屏幕坐标和十六进制颜色,然后检查屏幕以查看它们是否匹配。如果没有,则单击那些坐标。最初我只是在每次迭代时重复读取文件并且它起作用了,我想,除了它产生了无法使用的滞后量所以我不能确定。我在那次迭代中遇到的麻烦和我最终使用的代码是 。这就是为什么现在我要继续在启动时从文件在内存中创建一个 table 并改为使用它。这是我正在使用的文件:
1123 680 0x201F42
1178 679 0x0B3D55
1232 679 0x12352D
1286 680 0x0F211E
1344 681 0x231D30
1396 680 0x22171D
1454 680 0x392E30
这是我的代码:
Loop, Read, % "out.txt"
{
l := A_Index
for k, v in StrSplit(A_LoopReadLine, A_Space)
{
table[l,k] := v
}
}
Loop
{
if (GetKeyState("Space"))
{
for k, v in table
{
PixelGetColor, hue, % v[0], % v[1]
if (hue != v[2])
{
Click, % v[0] ", " v[1]
}
}
}
Sleep, 20
}
我目前能看到的唯一问题是第二个 for
块中的任何内容都没有被执行。我试图找出我的错误,但到目前为止我一直没有成功。阅读文档并没有给我一个明确的答案,甚至没有给我指出一个有用的方向,这就是我在这里问的原因。
您似乎在尝试创建一个 multidimensional array,如果您首先将 table
定义为数组或对象,它就会起作用。
因此,例如,只需在您的脚本之上添加一个简单的 table := []
即可。
然后你会得到这个:
您还会注意到 AHK 中的数组是如何从 1 开始的,而不是像许多其他语言中那样是从 0 开始的。
我之前修复你的其他脚本时错过了这个,所以它也需要修复。
此外,不确定您是否知道,但是 PixelGetColor
returns BGR 格式的颜色。不在 RGB 中。所以这也需要修复,假设它首先是一个问题。
因此,假设您的颜色 0x201F42
是 RGB,那么在 BGR 中它将是 0x421F20
。
此外,您是否知道您的坐标将相对于活动 window?
如果您不想这样,请指定例如 CoordMode, Pixel, Screen
以使坐标相对于您的整个屏幕。
这是您的脚本,其中添加了 table := []
并且索引更改为基于 1。
希望我没有遗漏任何东西,我无法真正测试它。
不过,我猜延迟会有一些问题。点击之间没有延迟可能不会起作用。在 Click
命令下尝试 Sleep
。
space 柱检查循环之间的 20 毫秒延迟也非常短。可能不会产生好的结果。
table := []
Loop, Read, % "out.txt"
{
l := A_Index
for k, v in StrSplit(A_LoopReadLine, A_Space)
{
table[l,k] := v
}
}
Loop
{
if (GetKeyState("Space"))
{
for k, v in table
{
PixelGetColor, hue, % v[1], % v[2]
if (hue != v[3])
{
Click, % v[1] ", " v[2]
}
}
}
Sleep, 20
}
我在这里处理了很多我不熟悉的事情,所以即使在查看文档并尝试修复大约一个小时后我也找不到问题。
目标是从文件中逐个获取屏幕坐标和十六进制颜色,然后检查屏幕以查看它们是否匹配。如果没有,则单击那些坐标。最初我只是在每次迭代时重复读取文件并且它起作用了,我想,除了它产生了无法使用的滞后量所以我不能确定。我在那次迭代中遇到的麻烦和我最终使用的代码是
1123 680 0x201F42
1178 679 0x0B3D55
1232 679 0x12352D
1286 680 0x0F211E
1344 681 0x231D30
1396 680 0x22171D
1454 680 0x392E30
这是我的代码:
Loop, Read, % "out.txt"
{
l := A_Index
for k, v in StrSplit(A_LoopReadLine, A_Space)
{
table[l,k] := v
}
}
Loop
{
if (GetKeyState("Space"))
{
for k, v in table
{
PixelGetColor, hue, % v[0], % v[1]
if (hue != v[2])
{
Click, % v[0] ", " v[1]
}
}
}
Sleep, 20
}
我目前能看到的唯一问题是第二个 for
块中的任何内容都没有被执行。我试图找出我的错误,但到目前为止我一直没有成功。阅读文档并没有给我一个明确的答案,甚至没有给我指出一个有用的方向,这就是我在这里问的原因。
您似乎在尝试创建一个 multidimensional array,如果您首先将 table
定义为数组或对象,它就会起作用。
因此,例如,只需在您的脚本之上添加一个简单的 table := []
即可。
然后你会得到这个:
您还会注意到 AHK 中的数组是如何从 1 开始的,而不是像许多其他语言中那样是从 0 开始的。
我之前修复你的其他脚本时错过了这个,所以它也需要修复。
此外,不确定您是否知道,但是 PixelGetColor
returns BGR 格式的颜色。不在 RGB 中。所以这也需要修复,假设它首先是一个问题。
因此,假设您的颜色 0x201F42
是 RGB,那么在 BGR 中它将是 0x421F20
。
此外,您是否知道您的坐标将相对于活动 window?
如果您不想这样,请指定例如 CoordMode, Pixel, Screen
以使坐标相对于您的整个屏幕。
这是您的脚本,其中添加了 table := []
并且索引更改为基于 1。
希望我没有遗漏任何东西,我无法真正测试它。
不过,我猜延迟会有一些问题。点击之间没有延迟可能不会起作用。在 Click
命令下尝试 Sleep
。
space 柱检查循环之间的 20 毫秒延迟也非常短。可能不会产生好的结果。
table := []
Loop, Read, % "out.txt"
{
l := A_Index
for k, v in StrSplit(A_LoopReadLine, A_Space)
{
table[l,k] := v
}
}
Loop
{
if (GetKeyState("Space"))
{
for k, v in table
{
PixelGetColor, hue, % v[1], % v[2]
if (hue != v[3])
{
Click, % v[1] ", " v[2]
}
}
}
Sleep, 20
}