Files
zWorkFlow/EXE_USAGE.md
ylytdeng 9e38684bc6 revert: 恢复 tkinter app_gui.py, 改成 Web UI / 桌面 GUI 共存
## 用户反馈

上次 commit e826b1a "删除 tkinter, 完全切到 Web UI" 误解了用户意图。
用户原意是 "完全用 webUI, **用户可以选择**" → 指 Web UI 内部给用户
充分选择, 不是删 tkinter。

用户澄清: "我的意思是共存", 即两套 GUI 都保留, 用户按场景挑。

## 改动

### 恢复
- \`app_gui.py\` (939 行, 从 e826b1a^ restore, 含之前修的 --task bug fix)

### 保留 e826b1a 的合理部分 (不回滚)
- \`monitor_web.py\` 的 \`_start_monitor_if_ready\` 重构 (无 keys 仍能开
  Web UI) - 这个 standalone 改进, 跟 GUI 选哪个无关, 保留
- \`WeChatDecrypt.spec\` 入口 \`monitor_web.py\` (Web UI 体验更好, 默认
  打包它; 想打 tkinter exe 改 spec 那一行就行)
- \`build.bat\` 简化 (单一 source of truth = spec, 不重复 add-data 清单)

### README 改共存叙事
- Windows 快速开始拆 2 个 details:
  - "Web UI (推荐, 跨平台 + 实时监听)"
  - "桌面 GUI / EXE (tkinter, 适合不开浏览器的场景)"
- 文件清单 \`app_gui.py\` 那行回来, 说明跟 \`monitor_web.py\` 共存关系
- "GUI 工具箱" 章节重写: 先讲 Web UI 推荐路径 + 三 tab 能力, 再讲
  桌面 GUI 备用场景 (公司机器禁浏览器 / 全离线 / 喜欢传统桌面应用),
  最后讲打包 (默认 Web UI exe, 改 spec 可打 tkinter exe)

### EXE_USAGE.md 共存
- 结尾的 "为什么没 tkinter" 改成 "还有个 tkinter (备用)"
- 说明何时该用哪个 + 怎么打 tkinter 版 exe

## 实测

- app_gui.py syntax OK
- monitor_web.py syntax OK
- 测试 185/185 通过
2026-05-17 19:28:57 +08:00

3.8 KiB

WeChatDecrypt 使用说明 (Web UI 版)

快速开始

  1. 启动微信 (个人微信 / 企业微信, 哪个想解密就启动哪个)
  2. 双击 WeChatDecrypt.exe
  3. 浏览器自动打开 http://localhost:5678 (没自动开就手动复制粘贴)
  4. 右上角点 🛠️ 工具 展开工具箱, 按 tab 切到你要的板块

工具箱 3 个 tab

📱 个人微信

步骤 操作
Step 1 — 解密 ① 提取密钥 + 解密数据库 / ② 提取图片密钥
Step 2 — 导出/解码 ③ 导出聊天 (弹模态框选会话+格式) / ④ 批量解密图片 / ⑤ 朋友圈解密+导出

前置: 微信 PC 版正在运行且已登录

🏢 企业微信

步骤 操作
Step 1 — 解密 ① 提取密钥 + 解密数据库
Step 2 — 导出 ② 导出聊天 (弹模态框选会话+CSV/HTML/JSON)

前置: 企业微信 PC 版正在运行且已登录 (独立于个人微信)

🔧 工具

跟微信/企微进程无关, 只读已解密产物:

  • 语音转 MP3 (需 ffmpeg 在 PATH)

实时消息监听

  • 工具箱下方就是消息流, 按时间降序排列 (最新在顶)
  • SSE 推送, 毫秒级延迟
  • 图片自动解密预览, 表情/链接/转账等富媒体内联渲染
  • 右上角 ⚙️ 配置消息通知规则 (按群名/发送人匹配, 桌面通知 + 声音)

导出筛选 (重要)

点 ③ 导出聊天 / ② 企微导出 后, 会弹模态框:

  • 🔍 搜索框按会话名/wxid 过滤
  • 复选框选要导的会话 (3142 个个人微信会话 / 14 个企微会话按时间降序)
  • 一键 [全选] / [清空] / [选最近 30 天活跃]
  • 选格式 (CSV / HTML / JSON, 企微支持; 个人微信目前只输出 JSON)
  • 点 [确认导出 →] 才真正跑

不会再"一点就跑全量"

任务终止

任何任务跑起来后, 触发的按钮会变成红色 🛑 终止。再点一下立刻 SIGTERM/kill 子进程。

前置要求

  • Windows 10 / 11
  • 微信 / 企业微信 PC 版已登录 (跑解密前需要进程在运行)
  • FFmpeg 已安装并加入 PATH (仅"语音转 MP3"需要)

输出目录

在 exe 所在目录下生成:

WeChatDecrypt.exe
config.json                  ← 首次运行自动生成
decrypted/                   ← 个人微信解密后的 SQLite 数据库
wxwork_decrypted/            ← 企业微信解密后的 SQLite 数据库
wxwork_keys.json             ← 企微 keys (含明文 raw key, 已 chmod 0600)
all_keys.json                ← 个人微信 keys (同上)
wechat_files/<wxid>/         ← 导出的聊天记录 (按 wxid + 联系人分子目录)
  张三/
    messages.csv             ← (用 export_messages.py 时)
    messages.html
    messages.json
  朋友圈图片/                  ← 朋友圈缓存图片解密后
  data/                      ← 语音转 MP3 输出 (有的话)
exported_chats/              ← 用 ③ 导出全部聊天 (JSON) 时的输出 (export_all_chats.py)
wxwork_export/               ← 企微聊天导出

远程访问 / 多设备

monitor_web 默认 bind 0.0.0.0, 同局域网其他设备可以访问 http://<你的本机 IP>:5678。如需要只允许本机访问, 修改源码 PORT 那一行附近的 bind 地址改成 127.0.0.1

还有个 tkinter 桌面 GUI (备用, 共存)

如果你 不想开浏览器 (公司机器禁浏览器 / 全离线场景), 可以用桌面 GUI:

python app_gui.py        # → 弹 tkinter 窗口

跟 Web UI 功能基本对齐 (8 个按钮 / 导出对话框), 缺点:

  • 中文字体下渲染较糊
  • Windows-only (不跨平台)
  • 没法远程访问

单 exe 默认入口是 Web UI。要打 tkinter 版的 exe, 改 WeChatDecrypt.specAnalysis(['monitor_web.py'])Analysis(['app_gui.py'])build.bat