本文面向梦幻西游手游时空客户端相关的桌面自动化开发与使用场景。金手指的判断依赖当前窗口截图、窗口矩形、模板文件和可复核日志,具体表现会受到客户端画面、Windows 缩放、窗口位置及运行权限影响。下面只讨论当前项目代码中已经存在的结构和排查方法,不把示意图冒充软件截图,也不虚构用户案例、排名、收录量或效果数据。关键内容即使不加载图片也能通过正文理解。
短暂菜单的机会窗口很短
短暂菜单的机会窗口很短
短暂菜单、队伍面板和提示层可能只在很短时间内出现。若程序先扫描一次、等待一段时间再扫描第二次,第二次结果可能已经来自另一种画面。此时即使点击坐标计算没有错误,也可能点击到过期位置。问题的核心不是单纯提高扫描次数,而是让识别、比较和动作尽量围绕同一帧证据完成。
一次截图先保存证据
采集到截图后先把原始图像、窗口矩形和采集时间放进本轮上下文,再在这张图上执行区域裁剪和模板或文字判断。这样候选框、相对坐标与截图之间有直接对应关系。真实软件截图用于开发排错时应先隐藏账号、聊天、卡密和网络信息,公开文章中的图只表达流程,不展示隐私界面。
候选命中要按同帧比较
同一帧出现多个候选时,应根据区域、模板类型和状态条件做比较,选出第一个满足规则的可靠命中。不要为了追求命中数量而把整张屏幕反复扩大扫描;过大的区域会引入相似图标,过小的区域又可能裁掉目标。每次候选都记录位置、尺寸、分数和采用的规则。
点击后立即验证状态
点击后不能只看函数返回值。应重新获取一张验证图,判断菜单是否关闭、任务状态是否推进或目标是否消失。若点击后画面没有变化,分开记录识别成功、输入发送和外部状态变化三个结果,才能判断是坐标转换问题、前台问题还是页面尚未稳定。
日志要记录时间与窗口信息
日志至少要带任务阶段、截图时间、窗口句柄、客户区矩形、搜索区域、命中框和最终屏幕点。排错时把这些字段与同一帧截图放在一起,比单独查看一串成功或失败文本更容易还原过程,也能避免用固定坐标补偿偶发的时间差。

排查时建议一次只改变一个条件,并保留窗口矩形、截图时间、识别框、匹配分数和最终动作。若要了解窗口移动后的相对识别,可阅读窗口相对识别说明;需要了解多尺度模板时,可参考多尺度模板匹配实践。
复核记录怎么写
当界面刷新频繁时,可以为每一轮上下文设置唯一编号,让截图、候选、点击和验证结果共享编号。这样即使日志异步输出,也能把属于同一帧的数据重新拼起来。若验证图显示页面已经换阶段,就把上一轮动作标记为已发送但结果待确认。
短暂窗口的排错重点是减少无意义等待。可以把等待拆为短间隔,每个间隔先检查停止事件和窗口是否仍在前台;发现可靠候选后立即使用当前帧的坐标。若没有候选,记录一次原因并等待下一次画面变化,不要在同一状态无限刷屏。
同帧原则也适用于文字识别:原始截图、裁剪区域、归一化文本和点击动作要有同一个采集编号。只有这样,空格、换行或短暂遮挡造成的差异才有机会被复核。\n\n本节内容应与实际运行日志一起核对,页面文字用于说明方法,具体结果以当前环境中的截图、窗口信息和代码行为为准。\n\n排查结束后再恢复完整任务链,先确认当前窗口、当前阶段与当前模板条件没有变化。\n\n实际发布前还要检查标题、摘要、canonical、封面图、图注、站内链接、移动端换行和页面 HTTP 状态,发布后的 URL 以站点返回结果为准。

