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 变化重启监听, 不需要 用户手动重启进程 (现在的设计是"重启进程才激活")
This commit is contained in:
46
README.md
46
README.md
@@ -62,17 +62,21 @@ python export_all_chats.py
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Windows — GUI / EXE (推荐非技术用户)</summary>
|
||||
<summary>Windows — Web UI / EXE (推荐非技术用户)</summary>
|
||||
|
||||
```bash
|
||||
# 直接跑 GUI (开发模式)
|
||||
python app_gui.py
|
||||
# 直接跑 Web UI (开发模式)
|
||||
python monitor_web.py # → 浏览器自动开 http://localhost:5678
|
||||
|
||||
# 或打包成单 exe 分发给别人
|
||||
build.bat # 输出 dist/WeChatDecrypt.exe
|
||||
# 双击 exe → 自动开浏览器 → Web UI 工具箱
|
||||
```
|
||||
|
||||
按钮覆盖: 解密 / 导出 / 朋友圈 / 企业微信 / 语音转 MP3。详见 [EXE_USAGE.md](./EXE_USAGE.md)。
|
||||
工具箱 3 个 tab (📱 个人微信 / 🏢 企业微信 / 🔧 工具),
|
||||
覆盖解密 / 导出 / 朋友圈 / 语音转 MP3 全部场景, 导出带模态框筛选 (不会动不动跑全量)。
|
||||
|
||||
实时消息监听跟工具箱在同一页面。详见 [EXE_USAGE.md](./EXE_USAGE.md)。
|
||||
|
||||
</details>
|
||||
|
||||
@@ -324,7 +328,7 @@ make help # 列出所有命令
|
||||
| 文件 | 说明 |
|
||||
|---|---|
|
||||
| `main.py` | **CLI 总入口** — 子命令 `decrypt` / `export` / `all` / `status` / `decode-images` / `help` |
|
||||
| `app_gui.py` | **Windows GUI** — tkinter 界面整合所有功能 (PR #107) |
|
||||
| `monitor_web.py` | **Web UI 总入口** — 实时监听 + 8 个工具按钮 + 导出筛选模态框 (`python monitor_web.py` 即用, PyInstaller 打包成单 exe 给非技术用户) |
|
||||
| `setup.sh` | 一键安装依赖 (macOS / Linux / Windows Git Bash) |
|
||||
| `setup.py` | 交互式配置向导 (`python setup.py --check` 仅检查环境) |
|
||||
| `cleanup.py` | 磁盘清理工具 (`status` 查看用量 / `--dry-run` 预览) |
|
||||
@@ -381,7 +385,7 @@ make help # 列出所有命令
|
||||
|
||||
| 文件 | 说明 |
|
||||
|---|---|
|
||||
| `monitor_web.py` | Web UI (浏览器实时收消息, SSE 推送, http://localhost:5678) |
|
||||
| `monitor_web.py` | (见 ① 入口) — 同一个文件既是 Web UI 总入口也是实时消息监听 |
|
||||
| `monitor.py` | 命令行实时监听 |
|
||||
| `mcp_server.py` | **MCP Server** — Claude AI 查询微信数据 (含 `get_chat_history` / `decode_voice` / `decode_refer` 等 20+ 工具) |
|
||||
| `decode_transfer.py` | CLI: 查单条转账消息 (mcp_server `decode_transfer` 工具的命令行包装) |
|
||||
@@ -446,35 +450,43 @@ WCDB (微信的 SQLCipher 封装) 会在进程内存中缓存派生后的 raw ke
|
||||
|
||||
`export_sns.py` 解析 SnsTimeLine 的 XML 时已加 **XXE 防护**(拒绝 `<!DOCTYPE>` / `<!ENTITY>` + 200KB 大小上限),避免恶意朋友圈 XML 通过 entity expansion 或外部实体引用执行 SSRF / 读取本地文件。`mcp_server.py` 解析其他类型 appmsg XML 同样有这层保护。
|
||||
|
||||
### GUI 工具箱 & 单 exe 打包
|
||||
### Web UI 工具箱 & 单 exe 打包
|
||||
|
||||
提供 tkinter 图形界面 (`app_gui.py`),集成核心功能:
|
||||
`monitor_web.py` 既是实时消息监听 (浏览器 Web UI), 又是工具箱总入口。
|
||||
右上角 🛠️ 工具 按钮展开 3 个 tab:
|
||||
|
||||
1. **解密数据库** — 调用 `main.py decrypt`
|
||||
2. **导出消息** — 调用 `export_messages.py`,输出 CSV / HTML / JSON
|
||||
3. **转换音频** — 调用 `voice_to_mp3.py`,SILK_V3 → MP3
|
||||
4. **企业微信解密** — 调用 `find_wxwork_keys.py` + `decrypt_wxwork_db.py`
|
||||
5. **企业微信导出** — 调用 `export_wxwork_messages.py`,按个人/群导出 CSV / HTML / JSON
|
||||
- **📱 个人微信**: Step 1 解密 / 图片密钥 → Step 2 导出聊天 / 批量解图片 / 朋友圈
|
||||
- **🏢 企业微信**: Step 1 解密 → Step 2 导出聊天 (CSV/HTML/JSON)
|
||||
- **🔧 工具**: 语音转 MP3 等
|
||||
|
||||
特点:
|
||||
- **导出筛选模态框**: 不会一点就跑全量, 弹框选会话 (含搜索/全选/选最近 30 天)
|
||||
- **任务终止**: 按钮变红 🛑, 一点立刻 SIGTERM 子进程
|
||||
- **跟实时监听共存**: 同一页面下方就是消息流, 互不影响
|
||||
- **跨平台 + 远程可访问**: 浏览器渲染清晰, 默认 bind 0.0.0.0 同局域网可用
|
||||
|
||||
#### 直接运行
|
||||
|
||||
```bash
|
||||
python app_gui.py
|
||||
python monitor_web.py # → 浏览器自动开 http://localhost:5678
|
||||
```
|
||||
|
||||
#### 打包为单 exe
|
||||
|
||||
```bash
|
||||
pip install pyinstaller
|
||||
build.bat
|
||||
build.bat # → dist\WeChatDecrypt.exe
|
||||
```
|
||||
|
||||
输出 `dist\WeChatDecrypt.exe`(约 18MB),双击即可使用,无需安装 Python。
|
||||
输出约 20MB 的单 exe, 双击即用, 无需安装 Python。
|
||||
|
||||
> 转换音频需要系统安装 [FFmpeg](https://ffmpeg.org/download.html) 并加入 PATH。
|
||||
> 语音转 MP3 需要系统安装 [FFmpeg](https://ffmpeg.org/download.html) 并加入 PATH。
|
||||
|
||||
详细说明见 [EXE_USAGE.md](EXE_USAGE.md)。
|
||||
|
||||
> **历史**: 旧版本提供过 tkinter `app_gui.py` 桌面 GUI, 在 commit 273fe65 后完全移除。
|
||||
> 原因: 渲染糊 / Windows-only / 维护两套 UI。Web UI 功能完全对齐且更好。
|
||||
|
||||
### WAL 处理
|
||||
|
||||
微信使用 SQLite WAL 模式,WAL 文件是**预分配固定大小** (4MB)。检测变化时:
|
||||
|
||||
Reference in New Issue
Block a user