Skip to content

完善内存字库、输入控制与 API 返回语义#205

Merged
qianniancn merged 8 commits into
WallBreaker2:masterfrom
qianniancn:codex/ocr-memory-dict-files
Jul 4, 2026
Merged

完善内存字库、输入控制与 API 返回语义#205
qianniancn merged 8 commits into
WallBreaker2:masterfrom
qianniancn:codex/ocr-memory-dict-files

Conversation

@qianniancn

Copy link
Copy Markdown
Collaborator

说明

这次主要补齐几块最近改动比较集中的能力:字库支持直接从内存字节加载,鼠标移动支持更细的轨迹配置,dx 输入可以临时锁住外部干扰。同时整理了一轮内部公共代码,把几个容易让调用方误判的返回值问题一并修掉。

主要改动

  • SetMemDict 改为按字节数据加载字库,支持 OP 二进制 .dict 和文本字库内容,并写入全局共享槽位。
  • 字库槽位扩展到 0-99,多个对象可以复用同一份内存字库。
  • 新增鼠标轨迹配置,支持平滑移动、区域随机落点、路径移动和路径拖拽。
  • 新增 LockInput,用于 dx 键鼠模式下临时屏蔽目标窗口的外部输入。
  • 整理截图、键鼠消息、JSON 字符串、图片模板视图等内部公共逻辑,减少重复实现。
  • libop/runtime 调整为 libop/base,目录职责更清楚。
  • 规范 FindPicFindColorBlockGetColorNumGetPicSize 等失败返回值。
  • OpenCV 和 YOLO 的 C API JSON 返回统一带 ok 字段,调用方可以按 ok 判断成功或失败。
  • 修正 COM GetScreenData 在 x64 下可能截断返回地址的问题。
  • 移除旧的 doc/todo.md

绑定与测试

  • 已同步 C API、COM、Python、Go 和 SWIG 相关导出。
  • 补充内存字库、鼠标轨迹、dx 输入锁定、返回值语义和 JSON 失败路径的回归测试。

SetMemDict 改为按字节数据加载字库,支持 OP 二进制 .dict 和文本字库内容,并写入全局共享槽位,多个对象可以复用同一份字库。

同步 C API、COM、Python、Go 和 SWIG 绑定。COM 接口改为接收 SAFEARRAY(BYTE),绑定侧按字节数组自动传入长度。

将字库槽位扩展到 0-99,并补充内存字库加载、二进制字库字节、跨对象共享和边界槽位测试。
新增 SetMouseTrajectory,用于配置轨迹类型、耗时范围、抖动幅度和起止停顿,作用于 MoveToSmooth、MoveToExSmooth、MovePath 和 DragPath。

MoveToSmooth 支持直线与贝塞尔曲线,MovePath 和 DragPath 保留用户传入路径,仅复用耗时和停顿配置。同步 C API、COM、Python、Go 和 SWIG 绑定,并补充鼠标轨迹测试。
新增 LockInput,用于在 dx 鼠标和 dx 键盘模式下临时屏蔽目标窗口的外部输入,脚本自身发送的 dx 输入仍然放行。

完善 DirectInput 鼠标状态填充,修正 DIMOUSESTATE 与内部状态结构大小相同导致的布局误判,并补充 Raw Input fake 事件读取后的消费处理。

同步 C API、COM、Python、Go 和 SWIG 绑定,补充 dx 锁定、DirectInput buffered 和 GetDeviceState 相关测试。
抽出 OpCaptureHelpers,统一 OpImage、OpOcr、OpYolo 里的区域截图、偏移设置和失败日志处理,保留 FetchWordsByRects 需要先解析转换坐标的特殊路径。

抽出 KeyMessageUtils,复用窗口消息 lParam、扩展键和 DirectInput 扫描码处理,减少 dx/windows 键盘与输入 Hook 的重复实现。

将 D3D11TextureMap 合并到 DxCaptureCommon,WGC、DXGI 和 D3D11 Hook 共享同一套 Map/Unmap 释放逻辑。
抽出图片模板视图准备和多点颜色参数解析,减少 FindPic、FindPicEx、FindMultiColor 等路径里的重复代码,保持原有匹配和解析语义不变。

统一键鼠窗口消息的 SendMessageTimeout 封装,并复用 JSON 字符串转义、反转义和浮点格式化工具,避免 OpenCV、YOLO、HTTP 客户端各自维护一份实现。

调整 DX 鼠标测试的事件记录方式,按目标移动和按钮事件判断脚本输入是否送达,避免真实桌面鼠标消息覆盖最后坐标导致用例抖动。
将 libop/runtime 改名为 libop/base,基础类型、线程池、平台封装和运行环境入口统一放在 base 目录下,避免 runtime 目录继续承担过宽的含义。

去掉 RuntimeUtils、RuntimeEnvironment 的文件名前缀,改为 Utils、Environment,并同步更新 CMake、include 路径和头文件 guard。

本次只调整内部文件组织和引用路径,不修改导出接口与运行逻辑。
统一 FindPic、FindColorBlock、GetColorNum 和 GetPicSize 的失败默认值,避免调用方拿到旧坐标或把未命中误判成第 0 个模板。

让 OpenCV 和 YOLO 的 C API JSON 返回在无效句柄、异常和失败路径下也带 ok 字段,用户可以按统一语义判断结果。

修正 COM GetScreenData 在 x64 下的返回类型,避免截图数据地址被 LONG 截断,并同步 Go 绑定失败返回。

补充对应回归测试;同时按本次整理移除 doc/todo.md。
移除旧的 open_issues_scan 记录,避免已经过期的 issue 分诊结论继续留在仓库文档里。
@qianniancn
qianniancn merged commit 9a9c77b into WallBreaker2:master Jul 4, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant