文档

合规与工程

这套库做什么、不做什么,以及发布成二进制时的真实取舍。

合规

  • 基于 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%

三个原因:

  1. 这些「热点函数」其实只是薄薄一层包装 —— 真正干活的是 re / difflib(C 实现) 和 UI Automation 的 COM 往返,Python 字节码占比极小。
  2. 编译后每次函数调用要付出 Nuitka 自己的调用开销,对微函数是净亏。
  3. 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]。