使用自动热键搜索图像

使用自动热键搜索图像

我正在学习如何使用 autohotkey,我想创建一个脚本,从 steam 打开游戏并自动加入特定服务器。到目前为止,我的代码是:

F1::
Run, steam://rungameid/346110
Sleep, 15000 <--- This is more or less the time that my computer takes to load it, and I want another way to check if the game is already loaded
MouseClick, left, 156, 520 <--- (Position of "JOIN ARK")
Sleep, 1500 <--- This is the time that takes to load the button (JOIN LAST SESSION) also I want to check this with another more efficient way
MouseClick, left, 746, 940 <--- Click the button "JOIN LAST SESSION"
return

因此,我使用此代码运行游戏并加入最后一个会话。我的元数据是创建一个循环,该循环执行以下操作:

1- 如果游戏尚未打开,请打开游戏。如果游戏已打开,请重新启动游戏。

2- 检查菜单何时出现,然后单击位于 x,y(156,520)的“JOIN”按钮。

3-检查“加入上次会话”按钮何时出现并单击它。

4-如果出现某些弹出窗口(我有所有错误的屏幕截图),请转到第 1 点。

我正在考虑 OCR,但不知道如何使用 autohotkey 实现它。

任何帮助,将不胜感激。

答案1

解决您的问题的方法是使用“ImageSearch”功能。

如果您在弹出窗口出现时按下打印屏幕按钮,则可以按 CRTL+V 将其粘贴到 Paint 中。然后,裁剪图像,只留下弹出窗口,并将其保存为 .bmp 文件。然后,您可以在 ImageSearch 代码中使用此位图文件。

快速浏览一下某人的 ImageSearch 代码可以发现这里

因此,如果您的脚本找到了它正在寻找的图像,您可以概述在“ErrorLevel = 0”下运行的进一步代码

如果你的脚本找不到图像,你可以概述在“ErrorLevel = 1”下运行的不同代码

此时,建议您开始标记代码部分并使用“Gosub”,这样当代码遇到不同的“if”变量时,就可以在例程之间跳转。这样,您就不需要创建一个重复太多的大型脚本。

还要注意,如果屏幕分辨率稍有不同,当您的脚本从一台机器转移到另一台机器时,ImageSearch 将无法正常运行。如果您尝试在屏幕分辨率不同的机器上运行代码,则必须再次截取弹出窗口的屏幕截图才能使其正常工作。

例子:

    ImageSearch, FoundX, FoundY, 40,40, 300, 300, C:\My Images\test.bmp

if ErrorLevel = 2
    MsgBox Could not conduct the search.
else if ErrorLevel = 1
    MsgBox Icon could not be found on the screen.
else
    MsgBox The icon was found at %FoundX%x%FoundY%.

相关内容