📖 工具简介
本工具基于Python开发,通过监听微信文件传输助手实现消息的增删管理,支持实时统计和数据持久化存储。无需数据库即可完成消息归档,是个人碎片化备忘录注记管理的轻量级解决方案。
🛠️ 环境准备
1. 微信版本要求
- 必须使用微信PC版3.9.11.17(点击下载)
- 登录微信并保持窗口处于打开状态
⚠️ 注意:新版微信可能不兼容,请严格使用指定版本
🚀 快速启动
- 下载程序文件
微信注记管理系统.exe
- 启动程序:

进入--微信注记管理系统.exe--点击启动监听按钮
- 主界面功能分区:
- 控制面板:启动/停止监听
- 统计面板:实时显示消息总量/当前记录/删除数
- 日志窗口:显示操作记录和系统状态
✨ 核心功能
1. 添加消息记录
向文件传输助手发送:
+你的消息内容
示例:
+项目会议纪要2024 @重要
+客户张经理电话13812345678
2. 删除消息记录
发送指定格式删除:
-消息ID
示例:
-1024 # 删除ID为1024的记录
3. 数据统计
- 自动计算总消息量
- 实时显示有效记录数
- 跟踪已删除记录数
🔧 高级配置
存储路径
"和微信注记管理系统.exe
同级目录/msg_data.txt"
⚡ 性能

🐛 常见问题
Q1: 消息发送后无反应
✅ 检查步骤:
- 确认微信版本正确
- 程序窗口是否显示"监听中"
- 消息是否以
+
或-
开头
🌟 使用场景
个人注记备忘管理
- 临时信息归档
- 重要事项提醒
- 联系人信息保存
📊 下载
微信注记管理系统.exe 密码:2288
"""
微信消息管理系统 by PySimpleGUI
功能:监听微信文件助手消息,实现消息增删管理,支持数据统计和持久化存储
日期:2025-03-12
版本:2.1
"""
# 导入模块
import PySimpleGUI as sg # GUI框架[2,3](@ref)
import time # 时间控制
import os # 文件操作
import re # 正则表达式
from threading import Thread, Event # 多线程支持
from wxauto import WeChat
import pythoncom # 新增导入
import threading
# ================== 全局配置 ==================
RECORD_FILE = "wechat_msg.txt" # 消息存储文件路径[3](@ref)
STATS = {"total": 0, "current": 0, "deleted": 0} # 统计计数器
RUNNING_FLAG = Event() # 线程运行控制标志[2](@ref)
# ================== 文件管理模块 ==================
def init_files():
"""初始化消息记录文件
1. 检查文件是否存在,不存在则创建
2. 加载初始统计信息[3](@ref)
"""
if not os.path.exists(RECORD_FILE):
with open(RECORD_FILE, 'w') as f:
f.write("") # 创建空文件
load_stats()
def load_stats():
"""加载统计数据
1. 读取有效消息行数作为当前记录
2. 计算最大ID作为历史总量
3. 计算已删除数[3](@ref)
"""
if os.path.exists(RECORD_FILE):
with open(RECORD_FILE, 'r') as f:
valid_lines = [line for line in f if line.strip()]
STATS["current"] = len(valid_lines)
max_id = max(int(line.split(':')[0]) for line in valid_lines) if valid_lines else 0
STATS["total"] = max_id # 历史最大ID即为总记录数
STATS["deleted"] = STATS["total"] - STATS["current"]
# ================== 核心业务逻辑 ==================
def process_message(msg):
"""消息处理引擎
参数:
msg: 接收的原始消息文本
返回:
处理后的消息记录或None[3](@ref)
"""
# 添加消息逻辑
"""消息处理引擎(修复版本)"""
if msg.startswith('+'):
# 生成ID时加锁(新增代码)
with threading.Lock():
new_id = STATS["total"] + 1
STATS["total"] = new_id
STATS["current"] += 1
new_record = f"{new_id}: {msg[1:].strip()}\n"
# 原子化写入(优化代码)
with open(RECORD_FILE, 'a') as f:
f.write(new_record)
# 返回最新记录(新增代码)
with open(RECORD_FILE, 'r') as f:
return f.read()
# 删除消息逻辑
elif msg.startswith('-') and msg[1:].isdigit():
target = int(msg[1:]) # 解析目标ID
updated_lines = [] # 新内容缓冲区
# 读写模式原子化操作
with open(RECORD_FILE, 'r+') as f:
for line in f: # 逐行扫描
if line.startswith(f"{target}:"):
STATS["deleted"] += 1
STATS["current"] -= 1
else:
updated_lines.append(line)
# 覆盖写入过滤后的内容
f.seek(0)
f.writelines(updated_lines)
f.truncate()
# 返回更新后完整记录
with open(RECORD_FILE, 'r') as f:
return ''.join(f.readlines())
return None # 未识别的消息类型
# ================== 监听线程模块 ==================
def wechat_listener(window):
"""基于wxauto的微信消息监听线程"""
pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED) # 新增关键代码[3](@ref)
# 初始化微信实例(网页1/3/7)
wx = WeChat()
wx.AddListenChat("文件传输助手") # 核心监听配置(网页2/8)
while RUNNING_FLAG.is_set():
try:
# 实时获取监听消息(网页4/7关键API)
msgs = wx.GetListenMessage()
for chat_win, msg_list in msgs.items():
for msg in msg_list:
# 过滤非文本消息(网页5/9优化点)
if (msg.type not in ['friend', 'group', 'self']) or (not msg.content.strip()) or (not msg.content.startswith(('+', '-'))):
continue
# 消息处理流水线
response = process_message(msg.content)
# 在消息处理部分添加:
if response:
# 发送完整记录(网页3建议反馈操作结果)
chat_win.SendMsg(f"更新后的注记:\n{response}")
window.write_event_value('-STATUS-', STATS.copy())
time.sleep(0.8) # 优化轮询间隔(网页1防封建议)
except Exception as e:
print(f"监听异常: {str(e)}")
wx = WeChat() # 自动重连(网页8容错机制)
wx.AddListenChat("文件传输助手")
# ================== GUI界面模块 ==================
def main_window():
"""主窗口布局
使用LightBlue2主题,包含:
- 操作按钮区
- 数据统计区
- 日志显示区[2,3](@ref)
"""
sg.theme('LightBlue2') # 设置主题[5](@ref)
# 新增提示信息板块
help_text = [
"操作指南:",
"1. 启动前请确保微信PC版已登录且版本为3.9.11.17",
"2. 追加词条:给文件传输助手发送 +注记内容 (例:+购买服务器)",
"3. 删除词条:给文件传输助手发送 -注记ID (例:-123)"
]
# 界面布局结构
layout = [
# 标题行
[sg.Text("微信注记管理系统", font=('微软雅黑', 16), pad=10, expand_x=True)],
# 新增版本提示行(带超链接)
[sg.Frame("环境准备", [
[sg.Text("▷ 微信版本要求:", font=('微软雅黑', 10)),
sg.Text("3.9.11.17",
enable_events=True,
tooltip="点击下载指定版本",
font=('微软雅黑', 10, 'underline'),
text_color='blue',
key='-VERSION_LINK-')],
[sg.Text("▷ by baivbai:", font=('微软雅黑', 10)),
sg.Text("ziyunchu.com",
enable_events=True,
tooltip="点击进入博客",
font=('微软雅黑', 10, 'underline'),
text_color='blue',
key='-ZIYUNCHU_LINK-')]
], pad=10, title_color='#2B579A')],
# 新增帮助说明板块
[sg.Frame("使用说明", [
[sg.Text('\n'.join(help_text),
font=('宋体', 10),
text_color='#444444')]
], pad=10, title_color='#2B579A')],
# 操作面板
[sg.Frame("操作面板", [
[sg.Button("启动监听", key='-START-', button_color=('white', '#2B579A')),
sg.Button("停止", key='-EXIT-', button_color=('white', '#8C8C8C'))]
], pad=10)],
# 数据统计区
[sg.Frame("数据统计", [
[sg.Column([
[sg.Text("当前记录:", size=10), sg.Text("0", key='-CURRENT-', size=15)],
[sg.Text("历史总量:", size=10), sg.Text("0", key='-TOTAL-', size=15)],
[sg.Text("已删除数:", size=10), sg.Text("0", key='-DELETED-', size=15)]
])]
], pad=10)],
# 日志显示区
[sg.Multiline("等待消息...\n", key='-LOG-', size=(50, 15), autoscroll=True)]
]
# 创建窗口对象
return sg.Window('微信注记管理',
layout,
resizable=True, # 允许窗口缩放
finalize=True, # 立即渲染
element_justification='center') # 元素居中
# ================== 主程序入口 ==================
def main():
"""程序入口函数
1. 初始化文件系统
2. 创建GUI窗口
3. 事件循环处理[2,3](@ref)
"""
init_files() # 初始化文件
window = main_window() # 创建窗口
window.set_min_size((800, 600)) # 设置最小尺寸
try:
# 主事件循环
while True:
event, values = window.read(timeout=100) # 非阻塞读取
# 退出事件处理
if event in (sg.WIN_CLOSED, '-EXIT-'):
RUNNING_FLAG.clear() # 停止线程
break
# 启动监听事件
elif event == '-START-':
RUNNING_FLAG.set() # 设置运行标志
Thread(target=wechat_listener, args=(window,), daemon=True).start()
window['-START-'].update(disabled=True) # 禁用启动按钮
# 状态更新事件
elif event == '-STATUS-':
# 实时更新统计显示
window['-CURRENT-'].update(STATS["current"])
window['-TOTAL-'].update(STATS["total"])
window['-DELETED-'].update(STATS["deleted"])
# 追加日志信息
window['-LOG-'].update(f"记录已更新:\n{values[event]}\n", append=True)
# 在主事件循环中新增:
if event == '-VERSION_LINK-':
import webbrowser
webbrowser.open(
'https://github.com/tom-snow/wechat-windows-versions/releases/download/v3.9.11.17/WeChatSetup-3.9.11.17.exe')
# 在主事件循环中新增:
if event == '-ZIYUNCHU_LINK-':
import webbrowser
webbrowser.open(
'https://ziyunchu.com')
except Exception as e:
sg.popup_error(f"程序异常: {str(e)}") # 错误弹窗[3](@ref)
finally:
window.close() # 确保窗口关闭
if __name__ == "__main__":
main()
Comments | NOTHING