Files
zWorkFlow/EXE_USAGE.md
ylytdeng e826b1a565 refactor: 删除 tkinter app_gui.py, 完全切到 Web UI 作为唯一入口
## 决策背景

用户反馈 "windows GUI 太难看了, 还是完全用 webUI 吧, 用户可以选择"。

tkinter app_gui.py (PR #107 引入, 929 行) 的问题:
- 中文字体下渲染糊 ("WeChat Decrypt 工具箱" 标题模糊)
- 90 年代 Windows 控件风格, 不暗色不现代
- 只能跑 Windows, 不跨平台
- 没法远程访问
- 跟 Web UI 维护两套, 重复

Web UI (monitor_web.py) 已经完全对齐功能:
- 8 个工具按钮 (3 tab 分组: 个人微信 / 企微 / 工具)
- 终止按钮 + 实时日志推送
- 导出筛选模态框 (会话搜索/复选/格式选择, close #112)
- 跟实时消息监听共享 SSE 通道
- Lucide SVG icon 统一风格 (无 emoji)
- 暗色主题 + design tokens + 玻璃质感顶栏

## 改动

### 删除
- \`app_gui.py\` (929 行 tkinter GUI)

### monitor_web.py
拆 \`main()\` → \`_start_monitor_if_ready()\` + 精简的 \`main()\`:

之前: keys 不存在 → \`sys.exit(1)\` 直接挂

现在: keys 不存在 → 跳过监听线程启动, 仅起 Web UI 服务。
用户从工具箱点 "① 提取密钥 + 解密数据库" 跑完后重启进程, 监听自动激活。
这样 exe 用户第一次双击时不会报错挂掉, 而是看到 Web UI 工具箱可以
直接用。

新启动流程: \`_start_monitor_if_ready\` 检查 keys 文件 / session.db
密钥 / session.db 路径都 OK 才启 monitor_thread, 任一不满足都给友好
提示但不退出。

### WeChatDecrypt.spec
- 入口 \`app_gui.py\` → \`monitor_web.py\`
- datas 清单补全 (加 export_all_chats / chat_export_helpers /
  batch_decrypt_images / transcribe_chat 等之前漏的)
- hiddenimports 显式列 Crypto / zstandard / pilk (避免 PyInstaller
  漏 detect)

### build.bat
- 删 30 行重复的 --add-data 清单 (跟 .spec 漂移风险)
- 改成 \`pyinstaller --noconfirm WeChatDecrypt.spec\`
- 单一 source of truth 是 .spec
- 完成提示从 "GUI 启动" 改成 "双击 → 浏览器开 Web UI"

### EXE_USAGE.md
完全重写为 Web UI 视角:
- 快速开始: 双击 exe → 浏览器自动打开
- 工具箱 3 tab 各自能力详解
- 导出筛选模态框使用说明
- 任务终止说明
- 输出目录布局
- 远程访问说明
- 结尾解释为什么去掉了 tkinter

### README.md
- 三平台 quick-start 里 "Windows GUI / EXE" → "Windows Web UI / EXE"
- 文件清单: \`app_gui.py\` 那行 → \`monitor_web.py\` (新身份: Web UI
  总入口)
- 技术细节里 "GUI 工具箱" 章节重写: 强调 Web UI 优势 (筛选模态框 /
  终止按钮 / 跨平台 / 远程访问 / 跟监听共存) + 末尾 1 句历史说明
  解释 tkinter 已删除

## 实测

- python monitor_web.py: keys 在 → 正常启动监听 + Web UI
- python monitor_web.py: 假装 keys 不在 → 跳过监听, Web UI 仍能开,
  用户从工具箱点 "① 提取密钥" 后重启即激活
- 测试 185/185 通过

## 没改 (留 follow-up)

- 实际打包 .spec 验证 (需要 Win 跑 pyinstaller, 没在 CI 跑)
- monitor_web 启动后**自动**检测 keys 文件 mtime 变化重启监听, 不需要
  用户手动重启进程 (现在的设计是"重启进程才激活")
2026-05-17 19:22:47 +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 了

旧版本 (commit b986413 ~ a01d326) 提供过 app_gui.py tkinter 桌面 GUI, 但:

  • tkinter 在中文字体下渲染糊
  • 90 年代 Windows 控件风格, 难看
  • 只能跑 Windows, 不跨平台
  • 没法远程访问
  • 维护两套 UI (tkinter + Web) 代码重复

commit (这次) 起完全切到 Web UI: 浏览器渲染清晰、跨平台、远程可访问、跟实时监听共享一套 SSE 通道, 同时没有功能损失 (8 个工具按钮 + 模态框筛选 + 终止 + 状态都在 Web 上)。