
微信多聊——我做了一个微信多开聊天工具
事情是这样的,我需要同时和很多人聊天,但是微信PC版一次只能看一个聊天窗口,切来切去太烦了。于是我就想,能不能做一个工具,把多个聊天窗口并排显示?
起因
微信PC版的设计是单窗口模式,每次只能看一个聊天。如果你需要同时和5个人聊天,就得不停地切换窗口,效率很低。
我想要的是类似Telegram Desktop那样的多窗口布局——左边是联系人列表,右边可以同时打开多个聊天窗口,并排显示。
技术方案
wxhelper框架
核心是用了一个叫wxhelper的开源项目,它通过DLL注入的方式,给微信PC版加了一个HTTP API。这样就可以用程序控制微信了。
主要功能:
- 获取联系人列表
- 收发消息
- 下载图片/文件
- 获取群成员信息
Python + tkinter
界面用Python的tkinter做的,原因很简单:
- 不想做成网页版(太重了)
- tkinter是Python自带的,不需要额外安装
- 可以打包成单个exe,双击就能用
架构设计
微信多聊/
├── app.py # 主程序(tkinter GUI)
├── src/_internal/
│ └── wxhelper/
│ ├── wxhelper.dll # 注入的DLL
│ ├── start-wechat.exe # 启动注入工具
│ └── config.ini # 端口配置
└── pins.json # 窗口布局持久化
核心架构:
- HTTP API:通过requests调用wxhelper的API
- TCP回调:wxhelper通过TCP推送新消息
- 消息队列:用threading.Lock保护的消息队列,桥接TCP回调和GUI线程
- 脏标记刷新:只有数据变化时才更新UI,避免无意义的重绘
UI设计
极简线条风格
最开始做了几个版本,有气泡风格、玻璃拟态风格,但都被否决了。最后选了Telegram那种极简线条风格:
- 深色背景(#111111)
- 消息用2px竖线区分自己/对方
- 自己的消息右对齐,橙色竖线
- 对方的消息左对齐,蓝色竖线
- 没有气泡、没有头像、没有多余装饰
2×8网格布局
右边是2行×8列=16个聊天窗口,每个窗口独立:
- 头部:联系人名字 + 关闭按钮
- 消息区:可滚动的消息列表
- 输入框:输入消息 + 发送按钮
左边是联系人列表,点击就可以把联系人分配到空闲的窗口槽位。
踩坑记录
1. 端口冲突
wxhelper注入后会在某个端口开启HTTP服务。但如果之前的注入没有正确退出,端口会被占用,新的注入就会失败。
解决:改用不同的端口(19001→19002→19003→19004...),或者等僵尸进程超时释放。
2. SQL查询超时
用SQL查询联系人表(SELECT * FROM Contact)会超时,因为联系人太多了(7000+)。
解决:改用get_contacts API(type=46),速度快很多。
3. UI刷新卡顿
每次收到消息都重建整个联系人列表,导致UI闪烁卡顿。
解决:
- 联系人列表虚拟化(只渲染可见区域)
- 消息气泡增量追加(不重建)
- 轮询间隔从600ms增加到2000ms
4. 消息显示为代码
手机发的消息有时候会显示成XML代码,因为某些消息类型没有正确处理。
解决:检测content是否包含XML标签,如果是就显示为[消息]占位符。
打包发布
用PyInstaller打包成单个exe文件:
pyinstaller --clean 微信多聊.spec
最终产物是一个35MB的exe,双击就能用。内部包含了:
- Python运行时
- wxhelper工具链
- 所有依赖库
目前的功能
- ✅ 16个聊天窗口并排显示
- ✅ 消息实时同步(2秒轮询)
- ✅ 联系人列表(100人,虚拟滚动)
- ✅ 支持文字、图片、表情、视频、语音消息
- ✅ 窗口布局持久化(pins.json)
- ✅ 极简深色UI
后续计划
- 群聊支持
- 消息搜索
- 文件发送
- 表情包发送
- 置顶聊天
最后
这个工具主要是给自己用的,解决自己同时和多人聊天的需求。代码写得比较粗糙,但基本功能都能用。
如果你也有类似需求,可以参考这个思路自己做一个。核心就是wxhelper + Python GUI,技术门槛不高。
写于2026年7月12日,by 海豚

