合规与工程
这套库做什么、不做什么,以及发布成二进制时的真实取舍。
合规
- 基于 Windows 官方 UI Automation,与目标程序的交互方式等同于「用户在操作界面」, 不注入进程、不修改内存、不破解协议。
- 使用第三方桌面自动化操作微信可能受软件版本、账号状态、平台规则影响, 本库不提供、也不承诺任何规避安全机制或风控的能力。
- 请自行阅读并遵守微信服务协议。
- 不要用于批量营销、向不特定用户群发、多账号群控等用途。
- 微信更新可能随时改变控件结构或进一步收紧 UIA 暴露,届时需要按 环境与版本 调整。
数据库路线的额外说明
wx4auto/dbkit/ 的引擎移植自开源项目 wechatauto-replica(v1.2.6.1,Apache-2.0),
按许可要求保留了版权与许可证全文,改动清单见 wx4auto/dbkit/NOTICE.md。
它通过 OpenProcess + ReadProcessMemory 只读扫描客户端进程内存取密钥。
不注入、不改内存、不注入 DLL、不碰网络协议 —— 这是社区公开做法。
但它确实是在扫描微信客户端进程的内存,极端情况下可能被安全软件告警。
不想用就把 WxParam.DATA_SOURCE = "uia"。
发布:Nuitka 编译成单文件扩展
python tools/build_release_nuitka.py # 编译 + 自检 + 出目录 + 打 wheel
产物在 wx4auto/dist/:
| 文件 | 说明 |
|---|---|
wx4auto.cp313-win_amd64.pyd |
整包一个扩展模块(含 dbkit / msgs),约 4.4 MB |
使用说明.txt |
给使用者的安装说明 |
licenses/ |
dbkit 上游的 NOTICE 与 Apache-2.0 许可 |
wx4auto-<ver>-cp313-cp313-win_amd64.whl |
可直接 pip install |
安装后用法与源码版完全一致。唯一差别:
编译版不能用 python -m wx4auto(单文件扩展包没有可运行的代码对象),
命令行请用 wheel 自动生成的 wx4auto 脚本。
必须知道的两件事
一、Nuitka 不会让这个库变快 —— 实测反而略慢。
tools/bench_nuitka.py(源码版 / 编译版交替多轮取最小值,CPython 3.13 + MSVC):
| 项目 | 源码 | 编译 | 变化 |
|---|---|---|---|
import wx4auto |
3.9 ms | 13.1 ms | 慢 237% |
classify_by_name_prefix |
0.45 µs | 0.86 µs | 慢 90% |
parse_wechat_time |
3.5 µs | 5.3 µs | 慢 51% |
similarity(长,difflib 主导) |
100.6 µs | 102.9 µs | 慢 2% |
三个原因:
- 这些「热点函数」其实只是薄薄一层包装 —— 真正干活的是
re/difflib(C 实现) 和 UI Automation 的 COM 往返,Python 字节码占比极小。 - 编译后每次函数调用要付出 Nuitka 自己的调用开销,对微函数是净亏。
- CPython 3.12/3.13 的自适应解释器已经很快,而 Nuitka 生成的 C 仍走完整对象协议。 现场拿「真·纯 Python 计算」对照,Nuitka 也只领先约 4%。
真正的 9 倍提速来自算法修复,与编译器无关:
ctrl.fast_find()用原生FindAll替代 Python 逐层遍历(6.1 s → 0.01 s)、SetValue(waitTime=0)去掉内置的 0.5 s 睡眠、chat_info()里的冗余查找改fast_find。
二、Nuitka 不是加密,只是抬高逆向门槛。
编译后确实没有 .py(__loader__ 是 nuitka_module_loader),
但任何编译产物都能被逆向 —— 这个项目本身就是从商业版的 .pyd 里
用静态字符串抽取拿到了完整 API 清单与控件类名。
要真正的保护只能靠授权 / 法务,别指望编译器。
编译环境
需要 Visual Studio Build Tools(勾选「使用 C++ 的桌面开发」)与 Windows SDK。
脚本会自己调 vcvars64.bat 取编译环境。
⚠ 若安全软件禁用了
reg.exe,vcvars就解析不到 Windows SDK (表现为INCLUDE/LIB里缺 SDK 路径)—— 脚本已内置手动补齐 SDK 的逻辑。另外:Python 3.13 上 Nuitka 已不支持
--mingw64,所以 Windows + 3.13 必须装 MSVC。
未实现 / 有意的取舍
| 项 | 状态 | 说明 |
|---|---|---|
SendAudio(发语音条) |
未实现 | 微信没有“上传语音文件”入口,语音条只能现场录。要做需要虚拟声卡 + ffmpeg 把音频播放进虚拟设备、同时驱动微信录音。接口保留并返回明确失败。 |
| 图片/文件下载 | 已实现 | 优先走「复制 → 读剪贴板」避开对话框,失败才退回系统另存为 |
| OCR | 已实现 | 复用微信自带「提取文字」,不需要外部引擎 |
| 红包 / 转账 | 不做 | 涉及金钱,与自动化工具的能力边界无关 |
| 协议层能力 | 不做 | 不注入、不改内存、不碰网络协议、不做验证码 / 风控绕过 |
| 撤回 / 引用 / 转发 | 受阻塞 | 依赖消息右键菜单,该菜单在后台模式下弹不出来(三种方式都实测失败)。接口保留且失败信息明确 |
一处已知的文档更正
wx.DB.messages() / wx.GetAllMessage(source="db") 返回的顺序是
最新的在前(时间倒序),不是正序 —— 取「最后一条」要用 [0]。