中文
功能特性
- (更新) 自更新重写为后台流程:启动后定时检查,自动下载并校验文件大小、SHA-256、文件版本与 x64 结构,完成后提示重启资源管理器生效
- (更新) 新版本注入后反复崩溃时自动回滚到上一版
shell.dll,并把该版本记为坏版本、不再自动升级 - (更新) 注入器纳入更新链路:旧的注册表与计划任务启动项自动迁移到规范安装位置,由它接管后续注入
- (配置) 设置页按 Fluent 设计重写,主题与动画可直接预览,数值项改用滑杆编辑
- (诊断) 用日志页和问题页取代调试控制台,可查看分级日志、配置覆盖项与脚本 / 运行时问题
- (脚本) 新增文件与文件夹占用查询,可列出占用进程、结束进程,并支持一次性批量判断
- (脚本) 自绘控件可参与菜单键盘导航:获得焦点、接收按键、拿到焦点变化回调,选中行自动滚入视野
- (脚本) 控件能力扩展:暴露绝对坐标与鼠标指针样式,新增位图图标控件,菜单尺寸可统计原生菜单项,菜单项支持显隐
- (脚本)
flex支持on_key_down、换行、最小尺寸、align-self、滚动条样式与文本省略号 - (菜单) 输入框聚焦时由菜单窗口接管键盘以支持输入法,关闭后归还焦点;回车直接激活首个可见项,嵌入控件首帧即可聚焦
- (渲染) 菜单、任务栏、注入器与 JS 控件迁移到事件驱动的 breeze-ui,空闲时不再持续重绘
- (配置) 字体改为按字体族名配置并支持回退链与彩色 emoji,新增
font.locale(默认优先中文) - (配置) 支持用
BREEZE_DATA_DIR环境变量重定向数据目录
问题修复
- (菜单) 修复「发送到」子菜单空白,以及菜单里多出用户目录项
- (菜单) 修复滚轮与触控板消息被投给焦点窗口后菜单无法滚动
- (菜单) 修复掉帧时悬停子菜单瞬间弹出,以及自绘菜单定位时跳到屏幕顶端
- (菜单) 修复自绘菜单项的位图图标丢失与背景半透明
- (菜单) 菜单文本清理零宽字符,不再出现缺字形方块,非法 UTF-16 也不再抛异常
- (兼容) 修复 OneCommander 新建文件夹被重复触发
- (兼容) ExplorerFrame 补丁改为只走经典菜单判定并跳过不可读引用,失败时给出告警
- (兼容) 不支持 host backdrop 的系统回退到 DWM 亚克力,不再出现空白背景
- (稳定性) 菜单 hook 的异常不再逃逸到资源管理器,键盘 hook 异常时正确释放,卸载时还原所有打过的补丁
- (稳定性) 修复异步回调与定时器跨线程拷贝引起的崩溃,重复定时器不再丢失回调
- (稳定性) 恢复崩溃上报,并由
shell.dll自己记录崩溃归因 - (配置) 首次运行不再强制打开调试控制台,配置重载出错不再拖垮文件监视线程,用户目录变量缺失时自动回退
- (渲染) 渲染目标初始化失败时跳过本次显示,不再崩溃
代码重构
- (脚本) JS 控件回调改为脱离渲染循环派发,同时跳过全透明的填充
构建系统
- (构建) 固定 reflect-cpp 版本以规避 clang-cl 22 的编译 ICE,并让 sentry-native 不再把新增警告当成错误
- (依赖) 升级 breeze-js 与 breeze-ui 到最新版本
杂项
- (版本) 版本号更新
English
Features
- (update) Self-update is now a background flow: it checks periodically after startup, downloads and verifies every build (size, SHA-256, file version, x64 image), and offers to restart Explorer once it is in place
- (update) If a freshly installed build keeps crashing, the previous
shell.dllis restored automatically and that version is never auto-installed again - (update) The injector is part of the update too: legacy Run-key and scheduled-task entries are migrated to the canonical install location, which takes over injection from then on
- (settings) Settings pages rebuilt on a Fluent design system: themes and animations preview live, and numeric fields use sliders
- (diagnostics) The debug console is replaced by a log page and a problems page covering leveled logs, config overrides, and script/runtime issues
- (script) New file and folder in-use query: list the processes holding a path, terminate them, or ask once for a whole batch
- (script) Custom widgets can join menu keyboard navigation: they take focus, receive keys, get focus/blur callbacks, and the selected row scrolls into view
- (script) More for widgets: absolute coordinates and cursor styles, a bitmap icon widget, native item counts in menu sizing, and per-item visibility
- (script)
flexsupportson_key_down, wrapping, min sizes,align-self, scrollbar styling, and text ellipsis - (menu) When an input field is focused the menu window takes over the keyboard so IME works, and hands focus back on close; Enter activates the first visible item, and embedded widgets are focusable from the first frame
- (render) Menus, taskbar, injector and JS widgets moved to the event-driven breeze-ui and no longer redraw while idle
- (config) Fonts are configured by family name with a fallback chain and color emoji; new
font.locale, defaulting to Chinese-first glyphs - (config)
BREEZE_DATA_DIRcan redirect the data directory
Fixes
- (menu) Fixed the empty "Send to" submenu and stray user-folder entries in the menu
- (menu) Fixed menus ignoring scrolling when wheel and touchpad messages go to the focused window
- (menu) Fixed submenus popping open instantly when frames drop, and self-drawn menus jumping to the top of the screen
- (menu) Fixed bitmap icons disappearing from custom menu items and rendering semi-transparent
- (menu) Menu text is stripped of zero-width characters so no more missing-glyph boxes appear, and malformed UTF-16 no longer throws
- (compat) Fixed OneCommander creating a new folder twice
- (compat) The ExplorerFrame patch now only takes the classic-menu path and skips unreadable references, warning instead of failing silently
- (compat) Systems without host backdrop support fall back to DWM acrylic instead of showing an empty background
- (stability) Exceptions from menu hooks no longer escape into Explorer, keyboard hooks are released on error, and every patched call site is restored on unload
- (stability) Fixed crashes caused by async callbacks and timers being copied across threads, and repeating timers keep their callback
- (stability) Crash reporting is back, and
shell.dllnow records its own crash attribution - (config) First run no longer forces the debug console open, config reload errors no longer take down the file watcher, and a missing user-profile variable falls back gracefully
- (render) A failed render target init now skips that draw instead of crashing
Code Refactoring
- (script) Widget callbacks are dispatched off the render loop, and fully transparent fills are skipped
Build System
- (build) Pinned reflect-cpp to dodge a clang-cl 22 ICE, and stopped sentry-native from treating its new warnings as errors
- (deps) Bumped breeze-js and breeze-ui to their latest revisions
Chores
- (version) Version bump