github std-microblock/breeze-shell 0.2.0

2 hours ago

中文

功能特性

  • (更新) 自更新重写为后台流程:启动后定时检查,自动下载并校验文件大小、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.dll is 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) flex supports on_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_DIR can 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.dll now 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

Don't miss a new breeze-shell release

NewReleases is sending notifications on new releases.