Repository navigation
Releases: jiyihao/memtidy
Release list
v0.1.6 — MemTidy 2.4 深度整理
MemTidy 2.4 · 一键深度整理
一键整理从两招升级为五步组合拳,每步单独显示释放量:
- 全进程工作集修剪(带进度条)
- 待机内存列表清理(管理员)
- 已修改脏页写回并释放(把脏页强制写回页面文件)
- 重复物理页合并(Win10 1607+;Win11 24H2 起系统已移除该接口,自动降级跳过)
- 第二轮工作集修剪(收割第一轮后被拉回的页面)
整理完成后自动列出占用最大且可安全结束的前 3 个进程,提示你手动清场。
玻璃引擎通透端修复: 透明度调到 100% 不再是浓彩“调色板”——彩色光斑与饱和度随透明度淡出,能真正看清背后桌面;出厂 74% 观感逐像素不变。
仓库更名: glass-ui → memtidy,本仓库现在是 MemTidy 内存整理器的主页;glass-ui 库照常发布在 PyPI(pypi.org/project/glass-ui),pip install glass-ui 不受影响。
下载:附件 MemTidy.exe(v2.4,无需安装)。MD5:4e26c3bc16142f82653b82bb9f9d0fe2
glass-ui v0.1.5 / MemTidy 2.3 — 截屏不再消失、可拖动滚动条、搜索与可清理排序
MemTidy 2.3 / glass-ui 0.1.5
四个来自真实使用反馈的改进。
新特性
1. Win+Shift+S 截屏时窗口不再消失
旧版为了防止玻璃背景"抓屏套娃",给窗口挂了 WDA_EXCLUDEFROMCAPTURE(从捕获中排除)。但 Win+Shift+S 的全屏遮罩本身就是系统级捕获会话——排除标志会让窗口在遮罩期间从屏幕上整个消失,用户一截屏工具就"蒸发"。
v0.1.5 起不再排除:首次抓屏改在窗口显示前完成(背景完全干净),显示中重抓混入的自身模糊影像在视觉上等同玻璃反光,且随重抓衰减。代价是玻璃底色偶尔会带上一点自己上一帧的"倒影"——这是有意的设计取舍。
2. 进程列表滚动条可以拖了
右侧滚动条从纯指示条升级为完整交互:按住 thumb 拖动、点击轨道向对应方向翻一屏、悬停/拖动时变色。不习惯滚轮翻页的可以拖了。
3. 搜索 + 可清理排序
- 表头右侧新增搜索框,按进程名实时过滤(防抖 200ms);
- 新增"排序"循环按钮:可清理优先(默认)→ 按内存 → 按名称;
- "可清理优先"模式下,进程按三档排列:当前权限下可直接结束 → 受系统保护(拿不到终止句柄)→ 保护名单(系统关键进程)。同档内按内存从大到小;
- 结束进程前的保护检查同步升级:除了名单,还会实测终止句柄,两类"删不掉"的都会提前拦截并说明。
4. 启动时询问运行模式
普通权限启动时会弹一次玻璃弹窗:以管理员重启(走 UAC)或普通模式继续。以管理员运行时不再询问。「清理待机内存」和结束更多后台进程都需要管理员权限。
下载
MemTidy 2.3 (Windows x64)— 单文件 exe,双击即用(Win10 2004+)- Python 用户:
pip install glass-ui==0.1.5
验证记录
GetWindowDisplayAffinity回读 =WDA_NONE(0x0),系统级抓屏拍到窗口内容(与基准截图平均像素差 24.2/255)- 滚动条拖动 / 轨道翻页 / 悬停变色 / 行选择共存:事件级自动化断言 15/15 通过
- 搜索过滤、三档排序、启动询问:exe 自检通过(含打包环境)
- 无边框窗口任务栏 / Alt+Tab 样式:
WS_EX_APPWINDOW=有 TOOLWINDOW=无
更正
旧文档(PITFALLS 第 13 条)称抓屏递归"必须"用排除标志解决——实测排除标志的副作用(截屏时窗口消失)不可接受,已改写为"映射前抓屏"方案,并新增第 21、22 条踩坑记录。
glass-ui v0.1.3 — 修复无边框窗口不进任务栏与 Alt+Tab
修了什么
无边框窗口不进任务栏、不出现在 Alt+Tab
overrideredirect(True) 会给顶层窗口打上 WS_EX_TOOLWINDOW,这是窗口"从任务栏消失"的直接原因。Windows 把带这个标志的窗口当成工具窗口处理,既不建任务栏按钮,也不进 Alt+Tab 列表。
本次新增 glass_ui.win.make_taskbar_window():把扩展样式改成 WS_EX_APPWINDOW、同时清掉 WS_EX_TOOLWINDOW,再调 SetWindowPos(..., SWP_FRAMECHANGED) 强制系统重算窗口框架。少了最后那一步,样式虽然改对了,任务栏按钮依旧不会出现。
为什么必须放在 on_map 里
这是本次踩得最深的一个坑:overrideredirect() 的取值每次变化(False→True 或 True→False)都会重建顶层 HWND,新句柄的扩展样式回到 Tk 默认的 0x80。最小化恢复走的正是 False→True 这条路,所以建窗阶段补的样式会被冲掉,必须在 <Map> 里、并且确定在 overrideredirect(True) 之后再打一遍。
别把这条写过头:实测同值重复调用不重建 HWND(
True→True→True句柄不变、样式不变)。完整的测量表在docs/PITFALLS.md第 12 条。
GlassWindow.after_map_settle() 里还做了一次延迟 80ms 的二次确认,兜住个别系统上映射瞬间句柄仍不稳定的情况。
其它
- 新增
glass_ui.win.get_exstyle(),返回无符号 32 位扩展样式,方便调试与断言 GlassWindow.taskbar_state()返回可直接断言的样式快照- 新增
GlassWindow.button_width(),按文字实际宽度算按钮尺寸,弹窗不再出现按钮挤压
MemTidy 2.2
随本版本一起更新 MemTidy.exe:
- 任务栏图标与 Alt+Tab 恢复正常
- 右上角齿轮可调玻璃透明度(0–100),设置写入
%APPDATA%\MemTidy\settings.json持久化 - 清理待机内存前自动启用
SeProfileSingleProcessPrivilege - UAC 点"否"不再导致程序窗口消失
升级
pip install -U glass-ui==0.1.3
glass-ui v0.1.1 — 修复弹窗失效,新增玻璃透明度设置
修复
1. 标题栏 ? 和「结束选中进程」点了毫无反应
根因:打包 exe 的那份代码里,GlassEngine 缺 dialog_plate 方法,而
show_about() / ask() / info() 全都要调它。每次点击都抛 AttributeError,
又因为打包成无控制台模式,异常没有任何地方输出——用户看到的就是按钮彻底是死的。
修法不是补这个方法,而是删掉重复代码:项目里原本有两份 memtidy
(一份独立版打包成 exe,一份库版在仓库里),抽库时只给库版补了这个方法,
独立版一直漏着。现在独立版已废弃,exe 只从仓库里的 examples/memtidy 打包。
2. 「清理待机内存」必定失败,报状态码 -1073741727
-1073741727 = 0xC0000061 = STATUS_PRIVILEGE_NOT_HELD。
清空待机内存列表要调 NtSetSystemInformation,它需要
SeProfileSingleProcessPrivilege。这个特权即使对管理员令牌也是「存在但未启用」,
必须用 AdjustTokenPrivileges 显式打开。原代码完全没做,所以谁来点都失败。
有个坑值得记:AdjustTokenPrivileges 在一个特权都没分配成功时照样返回 TRUE,
只在 GetLastError() 里留下 ERROR_NOT_ALL_ASSIGNED (1300)。只看返回值会把失败
当成功。现在两处都查,并把失败原因细分成「非管理员 / 特权被策略限制 / 系统调用出错」。
3. 进程列表表头有数字、表体一行都没有
GlassTable.delete() 内部会重绘,insert() 不会。于是「先清空、再批量插入」
之后画布永久停在空白态,要等鼠标划过表格或窗口重建,行才会突然冒出来。
这同时是「结束进程没反应」的第二层原因:表格空白 → 选不中任何行 → 走提示分支 →
而那个提示弹窗本身又是坏的。
4. 点 UAC「否」程序会自己消失
relaunch_as_admin() 不看 ShellExecuteW 的返回值,无条件当成功。用户拒绝提权后
程序照样执行关闭流程,窗口直接消失且什么都没做。现在只有真正提权成功才关闭自己,
失败会明确告诉用户是「取消了」还是「被拒绝」,并提示可以右键手动以管理员身份运行。
顺带修了脚本方式运行时提权重启参数为空的问题(只会拉起一个裸解释器)。
新功能:玻璃透明度设置
标题栏新增齿轮按钮,点开可拖动滑块调节界面玻璃强度。
- 100% = 最通透(能看清后方桌面),0% = 最磨砂
- 拖动时实时预览,松手才重建背景(重建要抓屏 + 高斯模糊,每帧做会卡)
- 设置存
%APPDATA%\MemTidy\settings.json,下次启动自动读回 - 默认 74% 下渲染与旧版逐像素一致(729120 像素零差异),加了设置不会改变原有观感
库层新增 GlassSlider 控件(圆角轨道 + 渐变填充 + 圆形滑块头,全 PIL 渲染),
引擎新增 opacity_to_veil() / set_opacity(),语义换算见 README。
附件
MemTidy.exe— 单文件免安装。清理待机内存需要管理员权限(右键 → 以管理员身份运行)界面预览.png— 界面截图
安装
pip install glass-ui==0.1.1MIT License.
glass-ui v0.1.0 — 首个版本
glass-ui 0.1.0
给 tkinter 的液态玻璃界面层。抓取窗口后方的真实桌面 → 高斯模糊 → 调色 → 合成卡片/描边/按钮底面 → 铺成 Canvas 背景,再配一套完全自绘的控件。
透出来的是真实桌面内容,不是渐变模拟。
包含内容
glass_ui/八个模块:engine/window/widgets/shapes/theme/win/compatexamples/dashboard.py— 最小可跑示例(900×640)examples/memtidy/— 完整落地案例:内存整理工具 MemTidydocs/PITFALLS.md— 17 条踩坑记录(症状 → 根因 → 解法)
附件
MemTidy.exe— 用本库写的内存整理工具,单文件免安装,双击即可运行(需要管理员权限才能结束进程)
安装
git clone https://github.com/jiyihao/glass-ui.git
cd glass-ui
pip install -e .环境要求
Windows(用到 Win32 接口)、Python 3.9+、Pillow 9+。没有 Pillow 时不会崩,自动退化成纯色直角界面。
已知限制
- 仅 Windows。抓屏、圆角裁剪、模糊都建立在 Win32 + BitBlt 上
- 窗口移动时需要重建背景,快速拖动会有轻微延迟
- 无法排除「其他玻璃窗口」在后方造成的套娃,已用
WDA_EXCLUDEFROMCAPTURE规避常规场景
MIT License.