Releases: iBitBetter/winmole
Releases · iBitBetter/winmole
Release list
v1.1.0
Changelog
本项目所有重要改动记录于此文件。
格式遵循 Keep a Changelog,版本号遵循 语义化版本。
1.1.0 — 2026-07-17
两天集中迭代(2026-07-16 ~ 07-17):TUI 全面改为 Mole 风格;GUI 完全重写为金山毒霸卡片风格,并将 Winapp2 社区规则正式接入 GUI(默认开启、可关闭);新增管理员提权重试与「重启时删除」兜底;社区规则扫描条目显示真实软件图标。
Added
- GUI 完全重写(金山毒霸卡片风格)
- 单窗口卡片式布局:打开即自动扫描 → 扫描完点「一键清理」→ 清理后自动重扫;复用现有引擎
Config/SystemCleaner/SizeUtils。 - 内置
IconPainter:Canvas 绘制 20+ 种图标(Windows/文件夹/浏览器/IM 等),无需外部图片资源。 - 新增四态状态机
MODE_IDLE / MODE_SCANNING / MODE_CLEANING / MODE_DONE,分别控制头部配色、按钮组与卡片样式。- 扫描/清理中:蓝色头部 + 当前路径滚动 + 卡片逐个展开动画(350ms 错开);清理进度实时更新。
- 完成态:绿色头部 +「已清理 XX MB」大标题 + 横向柱状图(每分类一列)+ 明细列表(按大小降序,状态徽章 已清理/部分清理/失败)。
- 「重新扫描」改为白色背景绿色文字实心按钮,与「管理员权限重试」并列。
- 单窗口卡片式布局:打开即自动扫描 → 扫描完点「一键清理」→ 清理后自动重扫;复用现有引擎
- GUI 接入 Winapp2 社区规则(默认开启、可关闭)
- 新增第 4 个分类
Community(紫色),IconPainter._community紫色拼图图标。 - 标题栏「社区规则」复选框(默认勾选),切换触发重扫;
_find_community_ini()+_load_community_rules()移植自 CLI 版并缓存。 - 扫描前按开关注入
set_community_rules();窗口背景色跟随红/蓝/绿头部。
- 新增第 4 个分类
- 「管理员权限重试」按钮(UAC 提权重跑)
_is_admin()(Shell32.IsUserAnAdmin)+_relaunch_as_admin()(ShellExecuteW "runas"触发 UAC,带--admin-retry/--community-off透传)。- 仅当完成态存在
failed项时显示;提权成功后关闭当前非管理员窗口,由提权副本自动重扫 + 自动清理(跳过确认框)。
- 「重启时删除」(MoveFileEx)兜底系统锁文件
- 引擎新增
schedule_reboot_delete()(ctypesMoveFileExW(MOVEFILE_DELAY_UNTIL_REBOOT));_delete_files/_clean_contents支持reboot_fallback,返回元组升级为(deleted, failed, scheduled)。 clean()新增 "scheduled" 状态;仅提权副本(reboot_fallback=self.admin_retry)才登记重启删除,普通清理不改系统行为。- 完成态新增蓝色徽章「已计划重启删除」,错误原因蓝色显示。
- 引擎新增
- 社区规则扫描条目显示真实软件图标
winapp2_adapter.py新增_pick_detect_exe(rule, env):从DetectFile挑 exe 路径并展开%ProgramFiles%等变量,在to_winmole_rules()导出detect_file字段。- GUI 新增
_extract_app_icon(exe_path)(SHGetFileInfoW+DrawIconEx→ PIL ARGB)与_get_app_icon()(按 exe+尺寸缓存tk.PhotoImage);社区条目优先显示真图标,失败回落手绘拼图。
- TUI(winmole_simple.py)全面改为 Mole 风格
- 扫描结果页:按 System / App caches / Browsers / Community 分组报告,含系统信息(CPU / 剩余空间)与白名单状态。
- 首页 Banner 改为 block 字符 "MOLE" 大 logo;菜单改为三栏 Table(编号+标题+英文说明)+ 快捷键栏。
- 磁盘分析页:Unicode 条形图(█/░)+ 百分比排名列表 + 快捷键栏。
- 系统监控页:状态栏 + ASCII mole logo + 纵向分区块(CPU / Memory / Disk / Power / Processes / Network)。
- 卸载页:交互式多选列表(↑↓/Space/Enter/0 全选/S 排序// 搜索/Q 退出),rich
Live原地更新消除抖动。 - 首页新增
6. Community开关菜单项(运行时开/关 Winapp2 规则,等价于--community);移除 Builds / Installers 菜单项与对应死代码(clean_build_artifacts/clean_installers/BuildArtifactCleaner引用)。
Changed
winmole_engine.py引擎增强SystemCleaner.scan()按规则来源注入category字段(system_junk→System, im_cleanup→App caches, browser_cache→Browsers, community→Community)。- 新增
command字段支持:scan()为带 command 的规则生成代表项(size=0);clean()识别后调用新增静态方法_run_command(subprocess,带 timeout 与 utf-8 容错)。 _parse_hive()重写:新增HKEY_USERS/HKEY_CURRENT_CONFIG及缩写HKU\/HKCC\;_delete_community_key()与clean()主循环except (OSError, ValueError),单坏键只记 failed 不中断批量。RegistryCleaner.get_installed_apps()读取注册表InstallDate字段。
winmole_simple.py输入处理- 顶部条件导入
msvcrt;新增_read_key()单键读取 Windows 扩展键(↑↓←→/PgUp/PgDn/Home/End)并兼容 ANSI VT 序列。 monitor_system()递归刷新改为while True循环(消除栈累积);卸载页抖动先console.clear()后改用 richLive固定高度原地更新。
- 顶部条件导入
winapp2_adapter.py:to_winmole_rules()透传detect_file;变量展开与 Detect 剪枝持续优化。locales.py:补充 community / command / 各 TUI 页面相关中英 key。- Tkinter 真图标用
lbl.image = photo保引用,防止被 GC。
Fixed
- 修复 GUI「一键清理」失效:缺
from tkinter import messagebox导致_do_clean()运行时NameError中断(已补 import)。 - 修复完成态三处问题:副标题浅绿在绿底不可见(改
#F0FFF0)、「重新扫描」融入背景非按钮(改白底绿字实心)、下方大片空白(改为柱状图 + 明细列表)。 - 修复社区规则名称截断:
_make_subitem硬限 8 字符 → Community 18 / 其他 14 字符,列数 6→4。 - 修复完成态看不到失败原因:
_on_clean_complete未将clean()返回的 status/error 写回self.scan_results,已按 (path,name) 匹配合并。 - 修正社区规则清理不掉的根因说明:系统锁文件需管理员或重启删除,错误信息改为「Files locked by system/apps — close apps or run as Admin」;提权重试失效后降级为「重启时删除」。
- 修复卸载页上下箭头无法移动:
Prompt.ask用input()无法捕获扩展键,改用_read_key()单键读取。 - 修复社区注册表清理崩溃:
HKEY_USERS\.DEFAULT等未知 hive 抛ValueError中断全批,已识别并改为单键 failed。 - 修复多处 CRLF / 转义导致的导入与脚本替换失败(源码改用 raw 字符串、bytes 替换等)。
1.0.0 — 2026-07-08
相对远端基线
v0.2.0-beta的首次功能升级。核心新增 Winapp2/Winapp3 社区清理规则的 opt-in 支持,并修复了打包与解析的若干稳定性问题。
Added
- Winapp2 / Winapp3 社区清理规则(opt-in,默认关闭)
- 新增
winapp2_adapter.py:解析 Winapp2/Winapp3 INI 语法(FileKey/RegKey/ExcludeKey/Detect/DetectFile/DetectOS)。- PascalCase 变量(如
%ProgramFiles%)大小写不敏感展开,兼容 Windowsos.environ大写键。 - 双架构目录展开(
%ProgramFiles%→ x64 + x86)、\→os.sep跨平台归一化。 - 重复 key 文本预处理去重(
_dedup_ini_lines),兼容真实 winapp2.ini 中大量重复选项。 Detect剪枝(含注册表型 Detect 真实查表)、注册表 hive 归一化(HKLM\→HKEY_LOCAL_MACHINE\)。load_community()统一返回{file_rules, reg_rules, raw_rules, count, kept}。
- PascalCase 变量(如
- 解析真实
data/Winapp2.ini实测:2781 文件规则 + 263 注册表规则。
- 新增
- GUI 社区规则开关
- System Junk 面板新增「Community rules (Winapp2)」勾选框,默认关闭,含状态提示(已发现/未找到 .ini)与帮助文案。
- 扫描结果 tree 新增 Source 列(Built-in / Community:分类),含
Warning的规则在汇总行标注⚠ N 条规则含警告。 - 注册表面板新增 Community 分类(默认关闭,开启社区开关时自动勾选),扫描合并
community_reg_rules。
- CLI 社区规则开关
winmole_simple.py新增-c/--community/--winapp2(三者等价,默认关闭)。- 开启后加载社区文件 + 注册表规则:文件项标
[C]并展示 warning;注册表删键前独立二次确认(Confirm.ask)。
- 测试与样本
- 新增
test_planb.py(6 项端到端测试:filespec 只删匹配文件保留目录、整目录保留空目录、REMOVESELF 删空目录、默认关闭无社区项、社区规则转换、注册表条目结构),全部通过。 - 新增
data/winapp3_sample.ini(13 条真实 Winapp3 样本 + RegKey/DetectOS 语法补充)。
- 新增
- 工程化
- 新增
.gitattributes(*.bat text eol=crlf,保证package.bat等克隆后仍是 CRLF)。
- 新增
Changed
package.bat重写- 编码由 UTF-8+LF 改为 GBK + CRLF(修复 cmd.exe 因 LF 续行失效导致的「不是内部或外部命令」)。
- 强制
pyinstaller>=6.0.0(兼容version_info.txt的裸VSVersionInfo(...)写法)。 - 新增
WINMOLE_NONINTERACTIVE=1非交互模式(跳过末尾 Test now? /pause,避免后台构建卡死)。 - 构建日志落盘
build_logs/gui.log、build_logs/cli.log,失败时tail 40行。 - GUI / CLI 构建均增加
--hidden-import=winapp2_adapter --add-data "data;data"(adapter 与data/一并打包)。 - 自动创建/修复 venv。
winmole_engine.py引擎增强SystemCleaner新增community_rules字段 +set_community_rules();scan()经统一_scan_rule_paths()处理内置与社区规则。- 支持
_filespec(只删匹配文件、保留目录)、_remove_self(删空目录)、is_file()分支(glob 同时命中文件时单独处理)。 RegistryCleaner新增_delete_community_key()精确删键,clean()支持category="community",category_map增加community。
locales.py:中英补充 community 相关 key(community_toggle/community_help/community_status_*/reg_cat_community/clean_col_source/clean_warn_note)。.gitignore:补充.workbuddy/、build_logs/,避免本地数据目录与日志进入仓库。
Fixed
- 修复
package.bat在 LF 换行符下每行报「不是内部或外部命令」(改用 GBK + CRLF 写入)。 - 修复
version_info.txt在 PyInstaller < 6 下KeyError(强制>=6.0.0)。 - 修复真实
data/Winapp2.ini加载时DuplicateOptionError: option 'Default' already exists(Python 3.13 configparser 先于 dict 赋值抛错;改用_dedup_ini_lines文本预处理合并重复值)。 - 修复启用 Community rules 后
NotADirectoryError: [WinError 267] 目录名称无效(glob 同时匹配目录与文件,文件被传入os.walk崩溃;新增is_file()分支 +is_dir()守卫)。
[0.2.0-beta]
远端仓库基线快照(早于本 changelog 建立)。包含早期
winmole_engine.py/winmole_gui.py/winmole_simple.py/locales.py/cleanup_rules.yaml等内置清理能力,尚未集成社区规则与适配器。
1.0.0
1.0.0 — 2026-07-08
相对远端基线
v0.2.0-beta的首次功能升级。核心新增 Winapp2/Winapp3 社区清理规则的 opt-in 支持,并修复了打包与解析的若干稳定性问题。
Added
- Winapp2 / Winapp3 社区清理规则(opt-in,默认关闭)
- 新增
winapp2_adapter.py:解析 Winapp2/Winapp3 INI 语法(FileKey/RegKey/ExcludeKey/Detect/DetectFile/DetectOS)。- PascalCase 变量(如
%ProgramFiles%)大小写不敏感展开,兼容 Windowsos.environ大写键。 - 双架构目录展开(
%ProgramFiles%→ x64 + x86)、\→os.sep跨平台归一化。 - 重复 key 文本预处理去重(
_dedup_ini_lines),兼容真实 winapp2.ini 中大量重复选项。 Detect剪枝(含注册表型 Detect 真实查表)、注册表 hive 归一化(HKLM\→HKEY_LOCAL_MACHINE\)。load_community()统一返回{file_rules, reg_rules, raw_rules, count, kept}。
- PascalCase 变量(如
- 解析真实
data/Winapp2.ini实测:2781 文件规则 + 263 注册表规则。
- 新增
- GUI 社区规则开关
- System Junk 面板新增「Community rules (Winapp2)」勾选框,默认关闭,含状态提示(已发现/未找到 .ini)与帮助文案。
- 扫描结果 tree 新增 Source 列(Built-in / Community:分类),含
Warning的规则在汇总行标注⚠ N 条规则含警告。 - 注册表面板新增 Community 分类(默认关闭,开启社区开关时自动勾选),扫描合并
community_reg_rules。
- CLI 社区规则开关
winmole_simple.py新增-c/--community/--winapp2(三者等价,默认关闭)。- 开启后加载社区文件 + 注册表规则:文件项标
[C]并展示 warning;注册表删键前独立二次确认(Confirm.ask)。
- 测试与样本
- 新增
test_planb.py(6 项端到端测试:filespec 只删匹配文件保留目录、整目录保留空目录、REMOVESELF 删空目录、默认关闭无社区项、社区规则转换、注册表条目结构),全部通过。 - 新增
data/winapp3_sample.ini(13 条真实 Winapp3 样本 + RegKey/DetectOS 语法补充)。
- 新增
- 工程化
- 新增
.gitattributes(*.bat text eol=crlf,保证package.bat等克隆后仍是 CRLF)。
- 新增
Changed
package.bat重写- 编码由 UTF-8+LF 改为 GBK + CRLF(修复 cmd.exe 因 LF 续行失效导致的「不是内部或外部命令」)。
- 强制
pyinstaller>=6.0.0(兼容version_info.txt的裸VSVersionInfo(...)写法)。 - 新增
WINMOLE_NONINTERACTIVE=1非交互模式(跳过末尾 Test now? /pause,避免后台构建卡死)。 - 构建日志落盘
build_logs/gui.log、build_logs/cli.log,失败时tail 40行。 - GUI / CLI 构建均增加
--hidden-import=winapp2_adapter --add-data "data;data"(adapter 与data/一并打包)。 - 自动创建/修复 venv。
winmole_engine.py引擎增强SystemCleaner新增community_rules字段 +set_community_rules();scan()经统一_scan_rule_paths()处理内置与社区规则。- 支持
_filespec(只删匹配文件、保留目录)、_remove_self(删空目录)、is_file()分支(glob 同时命中文件时单独处理)。 RegistryCleaner新增_delete_community_key()精确删键,clean()支持category="community",category_map增加community。
locales.py:中英补充 community 相关 key(community_toggle/community_help/community_status_*/reg_cat_community/clean_col_source/clean_warn_note)。.gitignore:补充.workbuddy/、build_logs/,避免本地数据目录与日志进入仓库。
Fixed
- 修复
package.bat在 LF 换行符下每行报「不是内部或外部命令」(改用 GBK + CRLF 写入)。 - 修复
version_info.txt在 PyInstaller < 6 下KeyError(强制>=6.0.0)。 - 修复真实
data/Winapp2.ini加载时DuplicateOptionError: option 'Default' already exists(Python 3.13 configparser 先于 dict 赋值抛错;改用_dedup_ini_lines文本预处理合并重复值)。 - 修复启用 Community rules 后
NotADirectoryError: [WinError 267] 目录名称无效(glob 同时匹配目录与文件,文件被传入os.walk崩溃;新增is_file()分支 +is_dir()守卫)。
[0.2.0-beta]
远端仓库基线快照(早于本 changelog 建立)。包含早期
winmole_engine.py/winmole_gui.py/winmole_simple.py/locales.py/cleanup_rules.yaml等内置清理能力,尚未集成社区规则与适配器。
v0.2.0-beta
Full Changelog: https://github.com/iBitBetter/winmole/commits/v0.2.0-beta
- cleanup_rules 新增微信、QQ、TIM、飞书 临时文件目录
- 命令行目录新增中文注释