我不知道我的 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
}