# BUG-20261006-0001 > 适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。 ## 基本信息 - ID: BUG-20261006-0001 - 标题: 搜狗未发送 IME 组合生命周期消息时,候选框未按当前锚点预定位 - 状态:已验证 - 严重性:S3 - 优先级:P1 - 模块: 阶段 0C / IME 坐标探测 / IMM32 - 版本 / 分支: `master`;发现基线为 `225bc35` 加开发中的 0C 探测实现,最终收口于 `43cf4ac` - 环境: Windows 11 `10.0.22000`、EasyX `25.9.10`、DPI-unaware 虚拟化视图 96 DPI、搜狗拼音 - 发现人: 用户真实搜狗输入法人工探测 - 关联 Fix ID: Fix-BUG-20261006-0001 ## 问题描述 - 现象: EasyX 探测窗口刚打开时,在 F1/F2 锚点直接输入 `ceshi`,搜狗候选框出现在窗口外的默认位置;首次提交后,候选框只在 F3 附近获得定位,之后切换 F1/F2/F3 仍可能沿用 F3 的旧位置。 - 影响范围: 阶段 0C-3 无法正确验证搜狗候选框定位;若生产输入系统只在 `WM_IME_STARTCOMPOSITION/WM_IME_COMPOSITION` 中设置位置,会复现同类 stale-position 问题。 - 期望结果: F1/F2/F3 任一锚点被选中后,在下一次输入开始前就把组合窗口和候选窗口位置写入当前 HWND 的 IME context;IME 生命周期消息到达时再校准一次。 - 实际结果: 非组合态切换锚点只更新内部索引和画面,不调用 `ImmSetCompositionWindow/ImmSetCandidateWindow`。 ## 复现信息 - 前置条件: 使用搜狗拼音运行 `scripts/run-visual-probe.ps1 -Mode ime-position -ImeName Sogou`。 - 复现步骤: 1. 启动探测窗口并确认搜狗拼音处于活动状态。 2. 按 F1,输入固定串 `ceshi`,观察候选框位于窗口外的默认位置。 3. 按 Escape 取消,按 F2 重复,仍观察到默认位置。 4. 在候选框中按 Space 提交一次,再切换锚点输入;候选框停留在 F3 附近。 5. 关闭窗口,检查 manifest 与 raw event sequence。 - 复现概率:本次人工测试稳定复现 - 最小复现 Demo:`EasyX.VisualProbe.exe --mode ime-position --ime-name Sogou` - 证据:`TestResults/VisualProbe/20261005-235150-704-4e01df99-019b-41bd-b8ea-b2ff508626e0/ime-position`。 ## 初步分析 - 疑似位置: `tests/visual-probe/ImePositionProbe.cpp` 的 F1/F2/F3 `WM_KEYDOWN` 分支。 - 触发条件: 输入法已经显示候选 UI,但没有向被子类化的 EasyX HWND 发送探测器所依赖的 `WM_IME_STARTCOMPOSITION/WM_IME_COMPOSITION`。 - 关键证据: - F1 `apiAttemptCount=0`,F2 `apiAttemptCount=0`,F3 `apiAttemptCount=2` 且两次成功。 - 原始事件序列中,F1/F2 只有 `anchor_change`;直到 F3 才出现 `ime_start -> ime_composition -> ime_end`。 - F1/F2 截图显示候选框在窗口外,F3 截图显示候选框位于最后一次成功设置的位置附近。 - 根因边界: 这不是 DPI 换算错误;F3 的 IMM 调用和坐标值成功。问题是位置设置触发得太晚,并错误假定所有 IME 都会先向目标 HWND 发送同一组生命周期消息。 ## 跟踪信息 - 首次发现时间: 2026-10-05 23:51(人工运行),2026-10-06 完成归档与定位 - 最后更新时间: 2026-10-06 - 修复版本: `43cf4ac`(阶段 0C 视觉与 IME 坐标探测) - 验证版本: 三平台构建与单元测试通过;搜狗真实输入复验自动与人工状态均为 `pass` - 备注: `-ImeName` 只记录操作者预期,当前 HKL/IMM32 身份字段不能自动证明 TSF 输入配置文件;成功复验的实际搜狗身份由操作者确认并写入人工评审旁车。