【问题标题】:I Don't Know What the Problem is with my AHK Script我不知道我的 AHK 脚本有什么问题
【发布时间】:2020-11-21 16:41:15
【问题描述】:

我在这里处理了很多我不熟悉的东西,所以即使在查看文档并尝试修复大约一个小时后我也找不到问题。

我们的目标是从文件中一一获取屏幕坐标和十六进制颜色,然后检查屏幕以查看它们是否匹配。如果没有,请单击这些坐标。最初我只是在每次迭代时反复读取文件,我认为它可以正常工作,除了它产生了无法使用的滞后量,所以我无法确定。我在迭代中遇到的麻烦和我最终使用的代码是here。这就是为什么现在我要在启动时从文件中创建一个内存表并改用它。这是我正在使用的文件:

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 块中的任何内容都没有被执行。我试图找出我的错误,但到目前为止我一直没有成功。阅读文档并没有给我一个明确的答案,甚至没有给我指明一个有用的方向,这就是我在这里问的原因。

【问题讨论】:

    标签: arrays syntax autohotkey


    【解决方案1】:

    您似乎正在尝试创建一个multidimensional array,如果您首先将table 定义为一个数组或一个对象,它将起作用。
    因此,例如,只需在脚本顶部添加一个简单的 table := [] 即可。
    然后你会得到这个:

    您还会注意到 AHK 中的数组是从 1 开始的,而不是像许多其他语言那样是从 0 开始的。
    我之前修复了你的其他脚本时错过了这个,所以也需要修复。

    另外,不确定您是否知道,但PixelGetColor 返回 BGR 格式的颜色。不在 RGB 中。所以这也需要修复,假设它首先是一个问题。
    因此,假设您的颜色 0x201F42 是 RGB,那么它将是 0x421F20 在 BGR 中。

    另外,你知道你的坐标是相对于活动窗口的吗?
    如果您不希望这样,请指定例如 CoordMode, Pixel, Screen 以使坐标相对于您的整个屏幕。


    这是您的脚本,其中添加了 table := [],并且索引更改为从 1 开始。
    希望我没有错过任何东西,我无法真正测试它。
    不过,我猜延迟会有一些问题。点击之间没有延迟可能不起作用。在Click 命令下尝试Sleep
    空格键检查循环之间的 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
    }
    

    【讨论】:

    • 再次感谢您。我认为初始化数组是我需要的,我曾经尝试过,但我尝试了table := Object()table := Array()。当两者都没有修复它时,我怀疑它是别的东西。也是的,我注意到了颜色格式。它实际上是我用来生成文本文件的另一个带有 pixelgetcolor 的脚本,所以我认为将它们都保留为 bgr 将在幕后少一步。和 coordmode 我忘了解释,但我很熟悉。再次感谢您的所有帮助。 AHK oop 对我来说很奇怪!
    • 指定table := Object()table := Array() 应该没问题。也许您的问题只是基于 0 的索引。
    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多