ImageSearch


在屏幕某一区域中搜索图像。

ImageSearch, OutputVarX, OutputVarY, X1, Y1, X2, Y2, ImageFile

参数

OutputVarX/Y

变量名称,其可储存屏幕上所发现图像之左上像素之X坐标及Y坐标。(若未能搜索到图像,则变量为空)。坐标为相对于活动窗口的坐标,除非用 CoordMode 进行更改。

两参数之一或两者皆可留空,其中可用事件 ErrorLevel (参见下文)来确定是否搜索到匹配图像。

X1,Y1 欲搜索矩形范围之左上角的X坐标及Y坐标,其可为表达式坐标是相对于活动窗口的坐标,除非用 CoordMode 进行更改。
X2,Y2 欲搜索矩形范围之右下角的X坐标及Y坐标,其可为表达式。坐标是相对于活动窗口的坐标,除非用 CoordMode 进行更改。
ImageFile

图像的文件名,若未指定绝对路径,则假定位于 %A_WorkingDir% 中。所有操作系统均支持 GIF、JPG、BMP、ICO、CUR、及ANI 图像 (BMP 图像必须为 16-bit 或更高)。其他图标资源包括以下类型的文件:EXE、DLL、CPL、SCR、及包含图标资源的其他类型。在 Windows XP 或更高版本中,可支持诸如 PNG、TIF、Exif、WMF、及 EMF 等其他图像格式。低于 XP 版本的操作系统亦可通过以下方法支持这些图像格式:即,将微软公司的免费 GDI+ DLL 拷贝至 AutoHotkey.exe 文件夹中(但当为编译的脚本 (compiled script)时,要将 DLL 拷贝至脚本文件夹中)。如欲下载 DLL,请在www.microsoft.com中搜索以下词语: gdi redistributable

Options: 亦可将零或更多个以下字符串直接置于文件名之前。每个选项用单个空格或制表符与下一选项分隔开。例如: *2 *w100 *h-1 C:\Main Logo.bmp

*IconN: 为使用不是在文件中排第一组的图标组,在 *Icon 后紧接指定的图标组编号。举例而言,*Icon2 将会加载第二图标组的默认图标。

*n (变化(variation)): 为 n 指定一个在 0 到 255 之间(包含255)的数字来表示在组成每个像素颜色的红、绿和蓝的饱和度的每个方向上允许变化的 shades(色调) 的数值。举例而言,*2 将容许 2 色调变化。当该图像之颜色发生轻微变化时,或当 ImageFile 使用一种诸如 GIF 或 JPG 等不能在屏幕上精确呈现图像之格式时,此参数有用。若指定 255 色调变化,则所有颜色皆将匹配。默认值为 0 色调。

*TransN: 此选项通过在图像中指定一种可与屏幕上任一颜色相匹配的颜色而促使更易于发现匹配图像。其通常用于寻找具有一些透明区域的 PNG、GIF、及 TIF 文件(然而,图标不需要此选项,此乃因对其透明性是自动支持的)。对于 GIF 文件,*TransWhite 很可会起作用。对于 PNG 及 TIF 文件,*TransBlack 可能最好。除此以外,可为 N 指定一些其他颜色名或 RGB 值(请参见 颜色表(color chart) 中的说明,或以 RGB 模式使用 PixelGetColor。) 实例:*TransBlack, *TransFFFFAA, *Trans0xFFFFAA

*wn*hn: 缩放该图像的宽度及高度(此宽度及高度亦可决定自多图标 .ICO 文件中加载哪个图标)。若这两个选项均省略,则自 ICO、DLL、或 EXE 文件加载的图标会被缩放至系统默认的小图标大小,其通常为16 X 16(你可通过指定 *w0 *h0来强制使用实际/固有(actual/internal)大小)。非图标图像以其实际大小加载。为在保持图像纵横比的前提下缩小或放大图像,可将高宽两个尺度之一指定为 -1 ,而将另一尺度指定为正值。举例而言,指定 *w200 *h-1 将使图像的宽度为 200 像素,并对其高度进行自动设定。

ErrorLevel

若在指定区域发现了该图像,则将 ErrorLevel 设定为 0 ,若未发现,则设为 1 ,若存在阻止命令执行搜索的问题(例如未能打开该图像文件或格式设置出错的选项),则设为 2 。

注意

ImageSearch 可用于在屏幕上查找缺少文本或其文本不易被检索到的图形目标。例如,其可用于查找图形按钮、图标、网页链接、或游戏目标的位置。一旦定位,则可通过Click对这些目标进行点击。

某些时候可采用如下策略:搜索图像的一小块图像剪辑而不搜索整个图像。此方法可在图像发生整体性变化而其内部某些部分保持不变的情况下提高可靠性。一种提取图像剪辑的方法是:

  1. 当在活动的窗口中可以看到图像时按 Alt+PrintScreen。此操作可将屏幕截图置于剪贴板中。
  2. 打开诸如画图板等图像处理程序。
  3. 粘贴剪贴板中的内容(即屏幕截图)。
  4. 选择对该图像而言唯一且不变的区域。
  5. 拷贝并粘贴该区域至新图像文件。
  6. 将其保存为随 ImageSearch 使用的小文件。

为实现匹配,屏幕上的图像必须与经由 ImageFile 参数及其选项所加载的图像具有相同大小。

待搜索区域必须可见;换言之,不可能搜索隐藏在另一窗口后面之窗口的区域。通过比较,通常能够探查到部分位于鼠标光标下面的的图像。例外情况是游戏光标,其在大多数情况下会遮住位于其下面的任何图像。

由于搜索自该区域的顶行开始向下移动,若存在一个以上的匹配图像,则将发现最接近顶部者。

包含透明色的图标会自动容许其颜色匹配屏幕上的任何颜色。因此,位于该图标后面之部分的颜色并不重要。

ImageSearch 可支持 8-bit 颜色的屏幕(256 色)或更高。

搜索行为可随显示适配卡的颜色深度(尤其对于 GIF 及 JPG 文件而言)发生变化。因此,若脚本将在多种颜色深度下运行,则最好在每种色深设置下皆进行测试。您可以使用变化色调选项(shades-of-variation option (*n) )来协助搜索行为在多种颜色深度下保持连续性。

若屏幕上的图像是半透明的,则 ImageSearch 可能会无法找到它。在此情况下,可尝试使用变化色调选项 (*n) 或通过 WinSet, Transparent, Off 使窗口临时不透明。

相关命令

PixelSearch, PixelGetColor, CoordMode, MouseGetPos

示例

ImageSearch, FoundX, FoundY, 40,40, 300, 300, C:\My Images\test.bmp CoordMode Pixel ; 将下面坐标表示为相对于屏幕而不是相对于所激活窗口的坐标。
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *Icon3 %A_ProgramFiles%\SomeApp\SomeApp.exe if ErrorLevel = 2 MsgBox 不能实施搜索。else if ErrorLevel = 1 MsgBox 未在屏幕上寻得图标。else MsgBox 在 %FoundX%x%FoundY% 处寻得图标。