Avalonia - #3
Merged
Merged
Conversation
解决方案 (SmartSideBAR.slnx, .NET 10 / Avalonia 11.3.20, 方案 §4.1): - SmartSideBAR.Core (net10.0, 平台无关): SidekickConfig 逐字段同构 types.ts (附录 B 互认) · ConfigService 三层合并+迁移+键白名单(B3 根修)+未知字段保留 · EventBus(IPC 事件替代) · SchedulerService(TimeProvider, C1 变更检测落盘, §6.10 过期周期提醒启动不补触发) · LinksService(E1 全量回写) · PolicyService · FloatBallLayout(floatball-layout.ts 逐函数移植) - SmartSideBAR.Windows (net10.0-windows): AppBarNative(LibraryImport) · AppBarApi(QUERYPOS 语义对齐 appbar.cc) · AppBarService 通知状态机 · WndProcHook(SetWindowLongPtr 子类化, Wave B 热键/USB 复用) - SmartSideBAR.Avalonia: Program.cs DI 装配(§4.2) · WindowManager · SidebarWindow Demo rail · SSB_SMOKE_EXIT_MS 冒烟自动退出 - tests: Core 40 + Windows 14 = 54 用例全绿 (FakeAppBarApi 状态机序列断言) AppBar 缺口 K1-K5/K7 闭环 (§5.1): ABN 通知 WndProc 闭环(K1) · ABM_ACTIVATE/ WINDOWPOSCHANGED 上报(K2) · 全屏降级与恢复(K3/V5) · 物理像素单轨(K4: PhysicalDpiScope 强制 PMv2 线程上下文 + MoveWindow 直达) · node-gyp 退役(K5) · DISPLAYCHANGE/DPICHANGED 重排(K7) · 孤儿注册自愈(V6) · 退出 WorkArea 恢复(V8) 对方案勘误 (docs/mlp-wave-a-report.md §2.3): 1) Reposition 锚点 rcWork→rcMonitor: rcWork 已含自身占位, 注册期 ABN 风暴中 占位带逐次内漂一个带宽 (实测工作区被蚕食至 43px); 沿边裁剪交 QUERYPOS 2) Avalonia AddWndProcCallback 非公开 API → SetWindowLongPtr 子类化等效实现 真机冒烟 (2560x1600 @150%): ABM_NEW=True · 侧栏贴右缘 64px · 工作区稳定扣除 · 退出后 WorkArea 完全恢复 · 旧目录配置自动迁移(.migrated.bak) CI 同步: dotnet job 指向 slnx; testing.md 追加 V1-V8 验收清单
…/6.13/6.14) - ImeService (§6.1/ADR-M6): GetKeyboardLayout/WM_INPUTLANGCHANGEREQUEST 直调, 零 PS 子进程 (<50ms→<5ms); config.ime.slot 语义落地 (zh↔en 轮换+回退) - UsbDeviceWatcher (§6.6/ADR-M5): RegisterDeviceNotification(DBT_DEVTYP_VOLUME) + WM_DEVICECHANGE, WMI 事件+巡检+PS 降级三层补丁退役; 盘符/卷标/容量查询 - PrinterMonitor (§6.7): System.Management 轮询, E4 根修 — PrinterStateMapper 用 DetectedErrorState 枚举映射 (单测锁定), 不再 PrinterStatus===3 误判 - HotkeyService (§6.13/P2-2): RegisterHotKey 冲突检测=系统事实 + 替代建议算法; WM_HOTKEY 经 WndProcHook 同一基础设施路由 → EventBus - ShellService (§6.8/B2 根修): taskmgr/外链域名白名单(https+内置+config.links)/ HKCU Run 自启 - SoundService: winmm PlaySound 别名 + MCI 播 MP3 (音量/重复/间隔全消费), 替代 PowerShell SystemSounds 守护 - 托盘 (P2-7): 运行时生成图标 + 菜单(显示侧栏/设置/退出); 侧栏 rail 接线 IME/任务管理器; 配置热键注册(capture/annotate/longshot/floatball/ime) - TFM 升级 net10.0-windows10.0.19041.0 (WinRT 投影, 为 Wave C 录屏备); 测试 74/74 全绿 (Core 58 + Windows 16)
…5/6.11/6.12/6.14) - GdiCapture (§6.2): BitBlt 物理像素直接裁剪 —— A4 类偏移结构性不可能; PNG/JPG 落盘 - OverlayWindow: 全屏透明置顶拖拽选框, Pointer 统一鼠标/触屏 (D1 语义); DIP↔物理仅换算一次 (K4) - AnnotateWindow (§6.3/D1/D3/P1-8): InkCanvas 统一 Pointer 事件流; 撤销/清空; 导出双模式 仅笔迹(透明 PNG)/含背景合成; 工具栏 颜色×5/粗细×3 - LongshotService (§6.4/A5/C3): EnumWindows(剔除 cloaked)+DWM 扩展框物理矩形 + PageDown 滚动 + 行哈希线性拼接 (LongshotStitcher 纯函数, O(n) 根修 O(n²)); 倒计时/进度/完成 全事件化 - GraphicsCaptureRecorder (§6.5/ADR-M4): GraphicsCaptureItem(IGraphicsCaptureItemInterop COM 路径, 19041 投影无 CreateForMonitorAsync) → Direct3D11CaptureFramePool 零拷贝 → MediaStreamSource → MediaTranscoder 系统 H.264 → MP4 直出 (希沃白板/微信可直读); fps/bitrate 消费 config.recorder; 停止交付 null 样本使 MP4 moov 完整 - FloatBallWindow (§6.14): 透明置顶球 + 拖拽 + 扇形菜单 (fanRadius 布局投影), 8 动作接动作路由 - SettingsWindow (§6.11/P1-6): 常规/截图/录屏/设备/热键/诊断 六区; 保存经 ConfigService 白名单路径并即时生效 (热键重注册) - OobeWindow (§6.11/P1-12/E2/P2-3): 6 步向导 + 环境真实探测 + OobeState 字段级合并 - DiagnosticsService (§6.12): 屏幕/触控/IME/USB/打印机/AppBar/录屏/目录可写 真实探测 + 诊断包导出 (report.json + logs.zip) - ToastService: 进程内右下角通知; 设备事件/录屏状态/保存结果全接入 - WindowManager 动作总路由: rail 按钮/悬浮球/热键/托盘四入口共用; 白名单模块跳过热键注册 (P2-1) - 冒烟: AppBar 稳定预留 + 5 热键注册零冲突 + 打印机轮询 2 台实检 - 构建 0 警告 0 错误, 测试 74/74 全绿
…ion 过滤注册 - 真因: RegisterDeviceNotification 仅接受 DEVICEINTERFACE/HANDLE 两类过滤器, VOLUME(2) 注册一律返回 err=13 ERROR_INVALID_DATA (真机复现并溯源 MSDN); 卷插拔 WM_DEVICECHANGE 本就广播给所有顶层窗口 —— 删除注册, 直接经 WndProcHook 接收 (与 v1.2.0 行为一致, 零注册零过滤) - OobeWindow 过时 API (ToggleButton.Checked → IsCheckedChanged) - Marshal.QueryInterface ref→in 警告清理 - 构建 0 警告 0 错误, 测试 74/74 全绿
- 发布产物: 单文件自包含 14.7MB (TrimMode=partial+压缩; 源生成 JSON 抗裁剪), Trimmed 冒烟全绿 (AppBar/5 热键/调度器/打印机/单进程) - 绿色安装包: dist/SmartSideBAR-2.0.0-waveC-win-x64.zip (10MB) — install.cmd/uninstall.cmd per-user 免管理员, 含信任脚本与 README - NSIS 脚本: installer/SmartSideBAR.nsi (per-user, HKCU 自启, 卸载先退应用 保证 AppBar 注销); CI publish 参数同步实测配置 - 性能实测 (§8): 空闲内存 私有87.5MB/工作集134.6MB (优于 Electron 220MB 预算, 未达 80MB 目标, 列 Wave D 优化); 冷启动 ~3.5s (含单文件解压); 子进程 0 ✓; 包体 14.7MB ✓ (目标 ≤25MB) - 报告: docs/mlp-wave-a-report.md 追加 Wave B/C/D 全量交付与三处新勘误 (USB VOLUME 过滤不可注册 / GraphicsCaptureItem COM 互操作路径 / ns 遮蔽规范)
批注无笔迹根修: - 根因: Avalonia 命中测试要求可命中元素 —— 裸 Control 无 Background/渲染内容 不接收指针事件, InkCanvas 永远收不到 PointerPressed - 修复: 笔画事件挂到宿主 Border(Background=Transparent, 文档保证可命中), InkCanvas 改为纯渲染层(BeginStroke/ExtendStroke/EndStroke API); Pointer 捕获 按 Captured 判定; 导出增加 DIP→物理缩放变换(P1-8 修正 150% 缩放下笔迹错位) USB 检测改为直接读取系统事件: - WM_DEVICECHANGE 三类(ARRIVAL/REMOVECOMPLETE/DEVNODES_CHANGED)全量触发 驱动器快照差异扫描(DiffDrives 纯函数, 单测锁定), 兜底只发 NODES_CHANGED 的读卡器类设备; 卷挂载延迟 900ms 二次确认(文件系统就绪竞态) - 删除无效的 RegisterDeviceNotification(VOLUME 过滤不可注册, err=13) 侧栏对齐 v1.1 设计(用户反馈): - 几何: rail 72 DIP + 面板 380 DIP(原 64/420 物理), 物理像素= DIP×窗口 DPI; AppBar 提议矩形改为工作区 84% 悬浮胶囊(上下各留 8% —— 不顶到最上/最下), 单测断言胶囊几何(874/83 @ 1040 工作区) - 液态玻璃: 浅色玻璃渐变(α≈0.35-0.45, 窗口级 AcrylicBlur 透出)+圆角 18 胶囊 +外投影; rail 项 52×52 圆角 14 悬停淡墨; dock 切换钮移至底部(⌃/⌄); 面板白底蓝字(P1); rail 顺序对齐 v1.1(IME 徽标/截图/批注/长截图/录屏/usb/ 打印机/任务管理器/链接/提醒/设置) - usb/printer 按钮改接状态查询(原误接长截图占位) - 真机验证: 胶囊 72×856 虚拟(=1284 物理=工作区 84%), Y=顶部 8%; PrintWindow 渲染确认浅色玻璃外观与图标列 - 构建 0 警告 0 错误, 测试 75/75 全绿
图标 (参照 SmartSideBAR-1.1): - 拷贝 1.1 全套 14 枚线条 SVG (24 视框), 生成 深色(rail)/白色(悬浮球扇形) 两套 - 引入 Avalonia.Svg.Skia 11.3.0; Tag="svg:名" 约定 + LoadSvgIcons 统一加载 (SvgImageExtension 在 11.3.0 有缺陷不可用, SvgSource(new Uri) 代码加载) - rail 图标全部替换 emoji → 1.1 SVG; floatball-icon.png 图元启用 dock 收起 (v1.1 dockMain 语义): - ↓ 收起 = 工作区底角 52×52 玻璃小方块 (sidebar.svg + ↑ 角标), ↑ 点击恢复 - 勘误: 透明窗口经外部 MoveWindow 缩放后 Avalonia 不再出帧 (真机复现: PrintWindow/抓屏全黑, 未缩放的悬浮球/胶囊正常) —— dock 改用独立 DockWindow, 侧栏 Hide(); AppBar 先 Detach (WorkArea 完整归还, v1.1 同语义), undock 重新 Attach (含孤儿注册自愈); dock 期间 QueryAndSetPos 会被自身旧占位顶位 —— 先注销自身再协商 - rail 52 DIP (v1.1), 面板 380 DIP; dock 位置 side-aware (左/右缘) 悬浮球重做 (v1.1 语义): - floatball-icon.png 玻璃球图元; 拖拽 (阈值 6px) + 释放吸附 (SnapToEdges); 单击展开玻璃扇形 (白色 SVG 图标, FanItemOffset 弧形排布, 方向远离最近角); 双击开合侧栏; 动作点击 → Dispatch 总路由 测试钩子: SSB_AUTO_DOCK_MS / SSB_AUTO_UNDOCK_MS (dock 形态自动化回归) 真机回归: dock 方块 (2482,1450) 78px 精准落位; dock→undock 全链路 (注销→方块→重注册→胶囊复原) 通过; 构建 0 警告 0 错误, 测试 75/75 全绿
…运营演进 + 八条技术勘误与环境备忘
- 两边 v1.2.0 树内容完全一致(diff 为空), 仅历史哈希不同 (远端仓库曾重建) - 冲突三处均为 add/add, 取本地超集版: .gitignore(精确 cert 规则+dotnet 忽略), docs/testing.md(+Wave A V1-V8 验收清单), appearance.ts(lint 修复)
ClassTechStar
added a commit
that referenced
this pull request
Sep 6, 2026
ClassTechStar
added a commit
that referenced
this pull request
Sep 6, 2026
ClassTechStar
added a commit
that referenced
this pull request
Sep 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.