OP (Operator & Open) 是一款专为 Windows 设计的开源自动化插件。作为一款现代化的桌面自动化解决方案,它提供了屏幕读取、输入模拟和图像处理等功能。
项目特点:
- 原生开发: 基于 C++17 编写,注重运行效率。
- 跨架构: 完整支持 32 位和 64 位应用程序。
- 易于集成: 标准 COM 接口,兼容 Python, C#, C++, Lua 等多种语言。
- 官方文档: Wiki
- GUI测试工具: OPTestTool (由 float 提供)
- 后台操作: 向非激活或最小化的窗口发送按键和鼠标点击。
- 输入模拟: 基于 Windows API (SendInput/SendMessage) 的系统级模拟。
- 窗口管理: 查找、移动、调整大小以及查询窗口状态。
- 智能找图: 支持透明度和颜色偏差的模糊找图功能。
- 内存找色: 高速的多点找色算法,直接读取内存数据。
- 多引擎截图: 支持 GDI, DirectX (DX), 和 OpenGL 屏幕截图。
- 安卓支持: 专为各类主流安卓模拟器定制的截图功能。
- 服务化 OCR:
- 通过独立
ocr_server(来自op_ocr_engine)提供 OCR 能力。 op侧通过 HTTP 调用服务,统一 x86/x64 调用路径。
- 通过独立
- Native 字典识别: 轻量级、高速的字典匹配算法,适用于固定字体。
- 极速响应: 专为实时游戏文字识别优化。
- 默认 OCR 服务地址:
http://127.0.0.1:8080/api/v1/ocr - 先启动服务(示例):
ocr_server.exe --datapath ./tessdata --lang chi_sim --port 8080
- 可通过
SetOcrEngine指定服务地址与超时:path_of_engine或dll_name可直接传完整 URLargv支持:--url=http://127.0.0.1:8080/api/v1/ocr --timeout=5000
- 下载: 前往 GitHub Releases 下载最新版本的压缩包。
- 解压: 将文件解压到本地目录。
- 注册 COM 组件:
以 管理员身份 打开终端,并运行以下命令:
# 对于 32 位应用程序 regsvr32 op_x86.dll # 对于 64 位应用程序 regsvr32 op_x64.dll
以下是一个使用 Python 调用插件进行找图的简单示例。
from win32com.client import Dispatch
import os
# 1. 初始化 COM 对象
op = Dispatch("op.opsoft")
print(f"插件版本: {op.Ver()}")
# 2. 设置路径 (可选,设置图片文件的基础路径)
# op.SetPath("C:\\Your\\Image\\Folder")
# 3. 执行找图
# 参数: x1, y1, x2, y2, pic_name, delta_color, sim, dir
# 分别为: 左上x, 左上y, 右下x, 右下y, 图片名, 偏色, 相似度, 方向
ret, x, y = op.FindPic(0, 0, 1920, 1080, "test.png", "000000", 0.9, 0)
if ret == 1:
print(f"找到图片: ({x}, {y})")
op.MoveTo(x, y)
op.LeftClick()
else:
print("未找到图片.")SetDisplayInput 支持两种 mem: 形式:
mem:<ptr>:ptr指向 BMP 内存(兼容历史行为)。mem:<ptr>,<w>,<h>,<fmt>:ptr指向原始像素内存,fmt支持bgra或bgr(默认bgra)。
示例(Python,OpenCV BGR 内存):
img_bgr = cv2.cvtColor(np.asarray(client.screen), cv2.COLOR_RGB2BGR)
mode = f"mem:{img_bgr.ctypes.data},{img_bgr.shape[1]},{img_bgr.shape[0]},bgr"
ret = op.SetDisplayInput(mode)说明:<ptr> 同时支持十进制与十六进制地址字符串(例如 0x7FF...)。
SendString(hwnd, str):优先向目标窗口当前焦点控件发送WM_CHAR,适合英文、数字和大多数符号输入。SendStringIme(hwnd, str):同时兼容WM_CHAR与WM_IME_CHAR路径,用于中文等 IME 相关输入场景。- 建议:在后台窗口场景下,先确保目标输入框已获得焦点,再调用发送接口。
- 键盘布局差异(如全角/半角、非 US 布局)可能影响部分符号字符,请优先在目标机器实测。
mouse=normal/windows/dx均可用,推荐在游戏窗口优先尝试dx。keypad=normal/normal.hd/windows可用;keypad=dx当前未提供。dx模式下,滚轮与按键状态依赖目标进程输入 Hook;若目标进程重启,建议重新BindWindow。
- Visual Studio 2022 (MSVC v143 toolset)
- CMake (3.24 或更高版本)
- Windows SDK (10.0.19041.0 或更高版本)
本项目依赖以下第三方库:
- Blackbone: 用于进程内存操作和注入 (静态链接)。
- Kiero: 用于 DirectX Hook (源码集成)。
- Tesseract: 用于 OCR 功能 (动态链接)。
从现在开始,推荐直接使用根目录 build.py 一键引导依赖并编译。脚本会自动处理:
- 安装/复用
vcpkg(优先复用已安装的VCPKG_ROOT或%USERPROFILE%\\vcpkg)。 - 一次性安装
x86/x64所需的gtest、minhook。 - 拉取并构建
BlackBone(缓存到build/_deps)。
如果您需要手动配置,仍可通过环境变量提供 BlackBone 路径。推荐设置 BLACKBONE_ROOT 指向 BlackBone 仓库根目录,CMake 会自动探测常见输出路径(包括命令行构建和旧版 VS 方案输出)。
set BLACKBONE_ROOT="D:\path\to\Blackbone"如果自动探测失败,可显式指定:
cmake -S . -B build -DBLACKBONE_INCLUDE_DIR="D:/path/to/Blackbone/src" -DBLACKBONE_LIBRARY="D:/path/to/Blackbone/build/x64/BlackBone/Release/BlackBone.lib"-
克隆仓库:
git clone https://github.com/WallBreaker2/op.git cd op -
一键安装依赖并编译(推荐):
python build.py
默认会生成目录:
build/vs2022-x64-Release -
常用参数:
# 指定架构构建 python build.py -a x86 # 输出目录: build/vs2022-x86-Release # 跳过依赖引导(已有完整环境时) python build.py --no-bootstrap-deps # 指定已有 vcpkg 路径 python build.py --vcpkg-root D:/path/to/vcpkg
-
使用 CMake 直接编译(推荐在 build.py 生成目录上执行):
cmake --build build/vs2022-x64-Release --config Release # x86: cmake --build build/vs2022-x86-Release --config Release -
传统 CMake 流程(高级用户可选):
cmake -S . -B build/Release cmake --build build/Release --config Release注意:该流程请避免在同一
-B目录内混用 x86/x64,否则会触发 CMake 平台缓存冲突。
- Issues: GitHub Issues - 报告 Bug 或 提交功能建议。
- Discussions: GitHub Discussions - 提问或分享想法。
- QQ 群:
- 1群:
743710486(已满) - 2群:
27872381(活跃)
- 1群:
本项目基于 MIT License 开源。