<h2>适用范围</h2><p>本文面向使用梦幻西游手游时空客户端的桌面自动化开发者,重点讨论可观察状态、截图证据和动作复核。内容来自当前项目的窗口选择、视觉识别、任务执行和日志记录方式,不把一次命中当成最终结论。</p><p>排错时先记录采集时间、窗口句柄、客户区矩形、截图来源、模板版本和动作结果。这样复盘时可以区分采集错误、识别错误、坐标错误和状态错误,而不是只看到最后一次点击。</p><p>窗口位置变化、Windows DPI 缩放、多开排列和遮挡都会改变像素结果。识别区域与点击位置应从当前窗口矩形计算,避免把桌面绝对坐标写成固定常量。</p><p>每一次动作都要有前置条件和后置验证。前置条件不满足时回到观察状态,后置验证失败时重新采集并记录证据,不在旧坐标上连续点击。</p><p>真实截图发布前先隐藏账号、QQ、卡密、IP、用户名、消息和其他隐私。若图片用于原理示意,正文仍然要用文字表达关键步骤。</p><p>可通过<a href="/guide.html">使用说明</a>了解基础流程,也可以在<a href="/articles/">文章频道</a>中对照窗口、任务和视觉识别记录。</p><h2>先拿到窗口矩形</h2><p>窗口句柄确定后,分别读取外框矩形和客户区矩形。标题栏、边框和阴影属于外框,不应直接当作游戏画面的起点。截图前把两个矩形写入日志,并标记采集时的 DPI 环境。</p><h2>检查四条边</h2><p>将客户区左上角转换到屏幕坐标,再用客户区宽高裁剪截图。若左边或上边出现标题栏内容,说明原点取错;若右边或下边被截断,说明尺寸取自外框或缩放转换没有完成。</p><h2>多开窗口逐个复核</h2><p>多开排列时每个窗口都要独立计算矩形,不能沿用第一个窗口的宽高。窗口移动后重新读取句柄和矩形,再采集一张新图。把窗口编号、矩形和截图文件名绑定,减少串窗排错。</p><h2>遮挡与最小区域</h2><p>客户区正确并不代表识别一定可靠。被其他窗口覆盖、缩放比例变化或游戏画面尚未稳定,都可能使裁剪结果不完整。先检查可见性,再用较小的 ROI 做目标识别。</p><h2>验证点击坐标</h2><p>识别点从客户区坐标转换到屏幕坐标后,点击前记录转换结果。点击后应观察画面变化或状态字段,若没有变化就重新采集,不在旧坐标上连续尝试。</p><figure><img src="/assets/articles/2026-08-18/window_clipping_client_rect_flow.png" alt="窗口裁剪与客户区流程示意图"><figcaption>窗口裁剪与客户区的抽象流程示意,关键步骤同时以文字说明。</figcaption></figure><h2>发布前自检</h2><p>检查标题、摘要、正文结构、meta title、meta description、canonical、封面 alt、正文图注和站内链接;确认 slug 未重复,正文中的产品名称统一为梦幻西游手游时空客户端,且没有把图片当作文字内容。</p><h2>实施时的复核顺序</h2><p>执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。执行前确认状态。执行后复核结果。异常时记录证据。</p>