Skip to content

v1.7.0

Choose a tag to compare

@wang01116 wang01116 released this 05 Nov 04:42
· 38 commits to main since this release
902991f

MiniDock 1.7.0 修复说明

严重bug修复

  • 状态栏左侧 MiniDock 按钮点击无反应:g_sbR[0] 在布局时被随后的“清空所有按钮矩形”循环清掉了,命中测试永远失败。现在清空循环跳过 [0],系统菜单(关于本机 / 系统设置 / Dock 设置 / 任务管理器 / 休眠 / 睡眠 / 重新启动 / 关机 / 锁定屏幕 / 注销)可以正常弹出。
  • 状态栏右侧弹窗没有毛玻璃:新增“状态栏弹窗毛玻璃”开关(性能页),并让弹窗的毛玻璃真正受该开关控制;关闭后弹窗为纯色,占用更低。
  • 隐藏任务栏后 Dock 下方空出一条任务栏高度:切换任务栏隐藏状态后立即重新应用 Dock 几何(工作区变了,Dock 需要马上移动),重启不再必要。
  • 永久隐藏任务栏时新增“Ctrl + 悬停临时显示任务栏”(可在任务栏设置里关闭):按住 Ctrl 把鼠标移到任务栏边缘临时显示,松开恢复隐藏。
  • 输入法切换后“中/英”不更新:标签改为读取前台窗口线程的键盘布局(原来读的是 Dock 自己线程的布局,永远不变),并在切换后 0.5 秒再刷新一次。
  • 状态栏在最大化窗口下 transparent 的问题:新增“最大化窗口时状态栏不透明(模糊/纯色)”开关;检测到前台窗口最大化时状态栏自动变为不透明,取消最大化后恢复透明。
  • 状态栏透明时右键菜单消失:全透明分层像素会被鼠标穿透;底盘保留最低 8/255 alpha,视觉几乎不变但可点击。
  • 输入法切换失效:改为按已安装键盘布局向前台窗口发送 WM_INPUTLANGCHANGEREQUEST 切换中/英,仅一个布局时回退 Ctrl+Space,切换后立即刷新“中/英”标签。
  • 设置搜索放大镜不居中:尺寸/位置改为按 DPI 缩放并按搜索框高度精确垂直居中。
  • Dock 点击窗口出现白边/白色色块:最小化窗口的 DWM 缩略图是空白的,还原动画用它就会出现白边;现在还原不再使用缩略图覆盖层(最小化动画不变)。
# 内容 实现
1 热点、节能模式没有出现在控制中心 控制中心现在固定显示全部 8 个开关(WiFi、蓝牙、深色模式、定位、静音、设置、节能模式、移动热点);高度按三行自适应。
2 控制中心开关不能排序 重写了排序读写:拖动开关即可交换位置,保存的是完整排列(自动补齐缺失项),不会再因为只保存 6/8 项而乱序;弹窗加了鼠标捕获,拖到弹窗边缘也不会丢事件。
3 控制中心能直接打开,而不是跳转设置 WiFi / 蓝牙改为先唤起 Windows 快捷设置面板(Win+A),可以直接在面板里开关;只有面板唤起失败时才回退到设置页/控制面板。
4 资源占用再小一点 全屏/游戏检测 120ms → 250ms,运行中窗口扫描 2.5s → 3.5s,磨砂玻璃刷新 3s → 5s;空闲时仍不保留动画定时器。
5 从 Dock 打开窗口仍有跳动 还原最大化窗口时直接用 SW_SHOWMAXIMIZED 还原(不再先显示普通尺寸再最大化),动画终点按 DWM 最大化边框向外扩,并在交接时对齐真实窗口边界。
6 快捷键支持自定义 新增配置项 HkMods / HkVk;设置 → 通用 → “修改快捷键”会弹出捕获窗口,按下新组合即可(支持 Ctrl/Alt/Shift/Win + 字母/数字/F1–F24),注册失败时仍保留低级键盘钩子兜底。
7 游戏模式防误触 新增“游戏模式防误触”:独占全屏(Direct3D)自动生效,也可在设置里把当前前台程序加入游戏列表;游戏运行时鼠标滑到屏幕边缘不会拉出 Dock,快捷键仍可临时呼出。
8 启动台标签切换可关闭 新增“允许启动台标签切换”开关;关闭后固定显示全部应用、不显示分类标签。启动台空白处右键新增菜单:“启动台设置”(直达对应设置页)与“关闭启动台”。
9 倒影独立设置 / 渐变 / 栏内倒影 “一键开启/关闭小组件”不再改动倒影设置;倒影设置新增“渐隐方式”(平滑淡出 / 线性渐变 / 均匀半透明)和“倒影位置”(栏外 / 栏内)。栏内模式下 Dock 栏本身增高容纳倒影,倒影被裁剪在栏内,不会超出 Dock。
10 深色模式图标 图标设置对话框新增“深色模式图标(可选)”,可为每个应用单独选择深色图标;设置里可选“关闭 / 跟随系统深色模式 / 按时间段(分钟)”。图标随主题或时间自动切换;配置中新增第 8 个字段保存深色图标路径,旧配置兼容。
11 文件夹弧形展开方向 文件夹展开的弧形改为向屏幕外侧展开(与 macOS 一致),左右两侧的图标名称位置同步镜像,不再出现“反方向弧度”。
12 右键菜单增加任务管理器 / 窗口合并开关 Dock 与顶部状态栏的右键菜单都新增“任务管理器”(可在设置 → 右键菜单配置里关闭此菜单项)和“窗口合并显示 / 窗口独立显示”开关(等价于设置里的多窗口模式)。
13 关机 / 重启 / 锁屏小组件 新增 1×1 电源小组件:显示电源图标,点击弹出小面板,选择关机 / 重启 / 锁屏;关机和重启会二次确认并启用关机特权。可在设置 → 小组件里开关,右键小组件可移除。
14 正在运行的设置窗口依然不显示 设置窗口已存在时只调了 ShowWindow + SetForegroundWindow,后台进程调用经常被前台锁拒绝。现在统一走 ForceForeground:还原/显示 → AttachThreadInput 解除前台锁 → SetForegroundWindow → BringWindowToTop → SetWindowPos(HWND_TOP),正在运行的设置窗口会被真正拉到最前。
15 从 Dock 点开“已最小化的最大化窗口”:动画和真正打开的最大化窗口错位,打开后闪一下 根因是动画的终点算成了工作区矩形,而 DWM 的最大化窗口四边还会向外多出一个可调边框(实测工作区 0,32,1920,1033 → 真实窗口 −8,24,1928,1041),动画收尾时比真实窗口小一圈,真实窗口一出现就跳一下。现在:① 最大化窗口的动画终点按 SM_CXSIZEFRAME + SM_CXPADDEDBORDER 向外扩并限制在显示器内;② 还原真实窗口后再用 DWMWA_EXTENDED_FRAME_BOUNDS 实测一次,把覆盖层贴到真实窗口完全一致的矩形上再交接,做到像素级衔接,不再错位/闪烁。
16 点击 Dock 上未运行的图标,应用不启动 点击释放时原来会重新做一次命中测试(HitIndex),而悬停放大/收缩会让图标在按下与抬起之间轻微移动,命中测试失败就丢弃这次点击——未运行的应用没有窗口反馈,看起来就是“点了没反应”。现在只要“抬起时按下的还是同一个图标”(按路径 + 名称校验,防止扫描插图标后误启动别的应用)就直接启动,不再依赖释放点的命中测试。
17 控制中心除静音外的图标会弹出“应用程序无法正常启动(0x0000142)” 0x142 是新的 Explorer 实例初始化失败(0xC0000142)。原因是 ms-settings: 的 ShellExecute 经常返回 31(DDE 超时,但实际已在启动),旧代码据此又用 ShellExecute(explorer.exe, "ms-settings:…") 兜底,第二个 Explorer 在已有外壳的会话里无法初始化,于是弹框。现在控制中心只用一次 ShellExecute(ms-settings:…),不再启动 explorer.exe;WiFi/蓝牙/定位/设置/热点都直接打开对应设置页。
18 开启“最大化窗口避让 Dock”后,最大化/网页全屏窗口仍与 Dock 重叠 修了三处根因:① AppBar 注册在窗口可见之前进行,Explorer 会拒绝隐藏窗口的注册——现在显示窗口后会再注册一次,并校验 ABM_NEW/ABM_SETPOS 的返回值;② 全屏判定从“有全屏”回到“无全屏”时没有重新应用预留(之前只在 Dock 完全滑出时才重新计算),现在全屏状态一旦变化就重算几何;③ 注册失败时以前会拿一个全零的 AppBar 矩形定位 Dock,把 Dock 顶到屏幕外——现在失败就退回正常工作区,并在后台每 2.5s 重试注册。这样“常驻 + 避让”会让最大化窗口真正缩到 Dock 上方,不开启时仍然重叠
19 最小化时窗口飞向任务栏而不是 Dock 图标 原因:ItemOfWin() 只匹配固定的图标,运行中才出现的临时图标被跳过,于是找不到目标图标、退回系统最小化动画(飞向任务栏)。现在按“独立窗口图标 → 绑定窗口 → 固定图标 → 临时运行图标”的顺序查找,临时图标也会成为动画目标
20 顶部状态栏不避让最大化窗口,桌面顶部图标被遮挡 状态栏同样按 AppBar 注册:窗口显示后再注册、校验返回值、失败时在 2.5s 同步里自动重试。开启“桌面图标与最大化窗口避让”后,工作区顶部会真正让出状态栏高度,最大化窗口与桌面图标都不再被压住
21 收到通知后 Dock 图标右上角没有小红点 之前只有在“在 Dock 上显示通知小组件”开启时才注册 ShellHook;现在启动时始终注册,红点与状态栏通知图标不再依赖那个开关;红点仍然按应用真实 exe 匹配(UWP 取实际进程)
22 顶部托盘图标点击无反应 旧逻辑先点任务栏经典 Toolbar32 的溢出箭头,在 Windows 11 上“点到了但什么也没打开”,于是永远走不到 Win+B 兜底。现在先执行 Win+B → Enter(Win10/11 通用),检查溢出浮层(TopLevelWindowForOverflowXamlIsland / NotifyIconOverflowWindow)是否出现,没出现才回退到经典箭头点击
23 Dock 上的网页应用打不开 应用窗口参数从 --app="URL" --new-window 改为 --app="URL":Chromium 的 --new-window 会让某些版本忽略 --app、退化成普通浏览器窗口(看起来像没打开)。保留“指定浏览器 → Chrome → 系统默认”的逐级回退
24 控制中心 WiFi / 蓝牙 / 深色 / 定位 / 设置点击无响应 ① WiFi、蓝牙不再依赖模拟 Win+A(合成 Win 键经常被系统忽略),改为直接打开对应的设置页(ms-settings:network-wifi / ms-settings:bluetooth),保证一定有可见响应;② 深色模式写入注册表失败时回退到个性化颜色页;③ 设置/定位/热点统一走 OpenSettingsPage():ShellExecute 失败时再用 Explorer 打开该 URI;④ 所有分支都保留关窗/更新主题的收尾
25 全屏玩游戏时鼠标往下移(看人物脚下)Dock 会弹出 重写全屏判定:只有真正铺满整个显示器的内容才算全屏;SW_SHOWMAXIMIZED 的最大化窗口一律不算(任务栏自动隐藏时工作区等于显示器,以前会被误判)。全屏分三类:0 不是全屏、1 视频/网页全屏(鼠标在边缘停留 260ms 才探出)、2 游戏/其他全屏(完全不允许边缘探出,只能 Ctrl+Alt+D 呼出)。自动隐藏的边缘触发在检测到全屏时也不再生效,避免瞄准时误触
26 启动台滑动很卡;软件莫名自动启动;图标偶发识别错误 启动台把每页图标+文字预渲染成位图缓存,滑动/翻页只做一次 blit,不再每帧重排 30 个图标和 30 段文字;打开/淡入只更新窗口 alpha;拖动时才走实时绘制。第二次启动 exe 不再弹设置窗口,而是把 Dock 呼出(这也是一部分“自己启动”的来源)。进程检测加缓存、删除无意义的 WorkingSet 回收。运行识别改为精确匹配优先,同目录的 Office 程序不再互相串台
27 已打开软件时 Ctrl+Alt+D 调不出来;鼠标在下方呼出时 Dock 一闪一闪 快捷键注册失败会在后台每 2.5s 重试;仍失败时安装低级键盘钩子兜底,任何前台程序(含全屏)里都能收到 Ctrl+Alt+D。切换加了 300ms 去抖、钩子过滤自动重复;呼出后 4s 内不会被自动隐藏/FsWatch 立刻滑走,因此不再闪烁
28 顶部状态栏边框线不能关 设置 → 状态栏与小组件新增“显示边框线”开关(SbBorder),默认开
29 切换不同缩放比例的显示器后位置、大小不一致 每个显示器独立读取 DPI(GetDpiForMonitor),所有配置像素值按 CfgDpi 换算;图标缓存也按实际像素尺寸重建;窗口几何按目标显示器的工作区重新计算,换屏后尺寸与位置保持一致
30 状态栏显示有通知的 App 图标并闪烁 状态栏右侧直接显示最多 4 个“请求注意”的应用图标(带应用真实 exe,UWP 取实际进程),480ms 呼吸式闪烁;没有通知时恢复铃铛。点击图标区打开通知列表
31 点击通知打不开对应的通知 App 点击通知行时先 AllowSetForegroundWindow,必要时 AttachThreadInput 后置前;窗口句柄失效时按 exe 重新查找该应用的窗口,再不行才启动该 exe(UWP 不会误启动 ApplicationFrameHost);点击后清掉该应用的通知
32 网页应用在只开了浏览器时也显示运行指示 只有真正的应用窗口(标题不带 “ - Google Chrome / - Microsoft Edge” 等浏览器后缀)才会绑定到网页图标;普通浏览器标签页永远算浏览器自己的。绑定窗口只标记对应网页图标,不再给浏览器加运行条
33 Dock 不在底部时反复跳动;悬停右侧小组件区闪烁;最大化/无边框窗口误判;鼠标离开边缘 2px 就抖 CursorNearDock 改为对**整条可见 Dock(图标条+所有小组件胶囊)**做命中测试,与边缘探出使用同一矩形;全屏判定不再把“铺满工作区”的窗口当全屏,最大化窗口有专门的 WPF_RESTORETOMAXIMIZED 排除;边缘探出改为小范围+停留判定,探出后只要鼠标还在 Dock 上就保持,不再 2px 抖动
34 设置页左侧选项卡图标不统一 重绘整套侧栏图标:24 单位网格、统一线宽、圆角端点、统一光学中心(齿轮 / 调色板 / 动效 / 应用方块 / 状态栏卡片 / 菜单面板 / 仪表 / 信息)
35 Win10 上启动台/Dock 特别卡、卡死、乱开应用、删快捷方式、反复跳动 启动台页面缓存 + 帧率上限;点击启动前校验“按下时的那一项”路径与名称,扫描插入图标不会把点击重定向到别的应用;拖拽排序 9px 阈值,拖出删除改为离开整条栏 22px 且持续 450ms 才算删除(以前拖到图标行上方 1.1 个图标就会删);去掉每 2.5s 的 WorkingSet 回收(Win10 上会造成持续缺页卡顿);全屏/自动隐藏判定统一,不再反复滑出滑入
36 Alt+Tab 切换、录屏时 Dock 会向下退出 全屏判定优先使用 SHQueryUserNotificationState,并排除 Alt+Tab/任务切换器/Shell 窗口类;识别到录屏软件(OBS、Bandicam、Fraps、Camtasia、NVIDIA/AMD 录制、Game Bar 等)运行时不隐藏 Dock(Game Bar 只在它自己位于前台时才算);网页视频/播放器全屏仍然隐藏
37 应用组无法应用图标底盘设置,和 Dock 其他图标割裂 应用组图标不再自己烘焙底盘:底盘的样式/圆角/颜色完全由 Dock 的统一绘制负责(Dock 图标、应用组弹窗、独立组栏、启动台一致);关闭底盘时仍保留原来的渐变方块外观
38 状态栏右上角图标纵向不对齐;有蓝牙/WiFi/声音/电量时不要单独的控制中心按钮 统一以状态栏几何中心排版,文字与线条图标使用同一基线(图标额外 1px 光学校正),蓝牙图标缩到与 WiFi/音量相同的光学高度;移除单独的控制中心按钮,点击 WiFi/蓝牙/音量/电量直接打开控制中心
39 静音图标要“喇叭 + x” 控制中心静音磁贴、音量滑块左侧图标都改为“喇叭 + x”,并与系统真实静音状态(CoreAudio endpoint mute)同步;状态栏音量图标同样显示静音态
40 控制中心小组件错位;新增“删除所有配置” 弹窗定位改为按锚点自动选方向:顶部状态栏弹出在下方,底部 Dock 弹出在上方,左右 Dock 从侧边弹出,再做屏幕内收敛(以前从状态栏打开会被顶到屏幕左上角)。控制中心高度按真实行数计算。关于页新增“删除所有配置并恢复默认”:清除设置、图标、应用组、启动台布局、自定义图标、速记、专注模式快照后回到内置默认
41 总是被杀后台 主动关闭 EcoQoS/执行速度与计时器分辨率节流(SetProcessInformation(ProcessPowerThrottling)),进程优先级 Above Normal;去掉会引发缺页的 WorkingSet 回收;守护进程在系统关机时不重启;崩溃循环仍有退避上限
42 Word 打开却显示 PPT 和 Word 都打开 匹配改为“精确匹配优先”:exe 路径 / UWP AppID / 同名 exe 命中后,不再使用同安装目录、父进程链等模糊规则;Office 等把多个程序放在同一目录的套件不会再串台(应用组里的子项同样生效)
43 容易导致资源管理器卡死 桌面设置/显示变更改为 350ms 合并处理,避免 AppBar 反复注册/取消导致 Explorer 重排所有最大化窗口;Explorer 重启(TaskbarCreated)后重新注册 AppBar;去掉高频 WorkingSet 回收与过度扫描(进程快照 1.5s、磨砂背景 3s);后台/全屏时降低无意义重绘

说明

  • 所有修复都保持原有的设置项与配置格式兼容;新增 3 个配置项(SbBorder、GrpFloat,以及内部 CfgDpi),旧 ini 会自动补默认值。
  • 启动台页面缓存会在打开期间占用内存(1080p 约 8 MB,翻页结束后只保留当前页;4K 下按比例增加),关闭启动台立即释放;这是滑动/翻页明显更顺的代价。
  • 无法在本机复现 Windows 10 环境,Win10 相关的卡顿/卡死项是按代码路径修复并做了保守处理(缓存、去抖、去 WorkingSet 回收),建议在 Win10 实机再点测一次。(我没有win10设备)
  • 精简包体积

新增

  • 状态栏独立控制中心按钮:WiFi、蓝牙、声音之外单独一个控制中心按钮(四宫格图标),点击直接打开控制中心。
  • 状态栏输入法按钮:显示当前“中/英”,点击用 Ctrl+Space 切换中文/英文输入。
  • 左上角 MiniDock 按钮:点击弹出系统菜单——关于本机、系统设置、Dock 设置、任务管理器、休眠、睡眠、重新启动、关机、锁定屏幕、注销(分组间有分割线)。
  • 隐藏/透明系统任务栏:设置 → 通用 → 任务栏:可“自动隐藏(鼠标滑过仍显示)”、“永久隐藏(滑过不显示)”,以及任务栏透明与不透明度;关闭后恢复系统原样。
  • 性能总开关:设置 → 性能 → “节能模式(关闭全部高耗能特效)”,一键关闭磨砂、预览、最小化动画与菜单模糊(倒影保持独立设置)。
  • 低电量自动节能:设置 → 性能 → “低电量自动节能” + 阈值(默认 20%);电池低于阈值自动开节能,接通电源后恢复。
  • 状态栏右侧项目严格跟随小组件开关:时间日期、通知、WiFi/蓝牙/声音/控制中心、CPU、托盘随对应开关显示或隐藏。