前言¶
在 Windows 上长时间对照文档、终端和浏览器时,DSH Desktop 窗口很容易被其他应用盖住,需要反复 Alt+Tab 切回。系统自带的「置顶」能力往往藏在右键菜单或第三方工具里,和 DSH 的插件化工作流也不在同一套配置里。下面介绍社区插件 dsh-always-on-top:在 DSH Desktop 标题栏右侧、最小化按钮左侧增加一枚图钉按钮,点一次置顶、再点一次取消,状态会记住并在下次启动时恢复。
这是什么¶
dsh-always-on-top 由维护者 Suibianlilili 发布,归类为 DSH 客户端插件。官方描述是:在 DSH Desktop 标题栏提供一枚小型图钉按钮,单击即可让窗口保持在所有其他窗口之上,再单击则释放置顶。
实现上体量很小:一条 host 路由加一段 client 脚本,无额外依赖、无需构建步骤,解压约 30 KB。包名与 npm 发布名均为 dsh-always-on-top,当前资料中的版本为 0.1.4,许可证 MIT。
核心功能¶
根据 GitHub README 与包清单,已核实的能力如下:
- 标题栏图钉:按钮位于标题栏右端、Windows 最小化按钮左侧。
- Win32 置顶:通过
WS_EX_TOPMOST窗口样式切换始终置顶;置顶时按钮变蓝,工具提示为「Always on top — click to unpin」(未置顶时为灰色)。 - 状态持久化:置顶状态写入
$DSH_HOME/dsh-always-on-top.json(默认~/.dsh/),下次启动会重新应用。 - 环境感知:仅在 Windows 上的 DSH Desktop(Electron)内显示;在
dsh web(浏览器)及其他操作系统下自动隐藏。
安装与启用¶
包已发布到 npm。README 说明:desktop profile 由 Electron 应用持有,DSH CLI 不会直接管理该 profile,需用下文命令或在应用内的插件设置安装。
从 npm 安装(推荐)¶
适用于 DSH CLI(web / tui profiles)时,可先加到 web profile;若目标是桌面端,应装到 desktop profile 并改 bundles。
# DSH CLI(web / tui profiles)
dsh plugin --profile web add dsh-always-on-top
# 或直接加到 desktop profile
pnpm -C "$env:USERPROFILE\.dsh\profiles\desktop" add dsh-always-on-top
# 然后将 "dsh-always-on-top" 写入 dsh.profile.bundles,并重启应用
从 GitHub 安装¶
pnpm -C "$env:USERPROFILE\.dsh\profiles\desktop" add "github:Suibianlilili/dsh-always-on-top"
# 然后将 "dsh-always-on-top" 写入 dsh.profile.bundles,并重启应用
手动步骤¶
# 1. 将包装入 profile
pnpm -C "$env:USERPROFILE\.dsh\profiles\desktop" add dsh-always-on-top
# 2. 在 package.json 的 dsh.profile.bundles 中加入 "dsh-always-on-top"
# 3. 重启应用
经过上面的步骤,重启 DSH Desktop 后标题栏应出现图钉控件。
典型用法¶
图钉在标题栏最右侧、最小化按钮左侧:
- 灰色:未置顶
- 蓝色:已置顶
单击即可切换。工具提示随系统语言显示英文或中文。
单次切换大约需要 0.4–0.6 秒(host 会启动 PowerShell 编译 P/Invoke 声明),按钮会显示忙碌状态,属 README 中说明的预期行为。
工作原理(简要)¶
插件运行在 DSH host 进程;Electron 主进程拥有窗口,且 host 的 process.ppid 即该主进程。流程为:
- 客户端点击后
POST /dsh-always-on-top/toggle - host 用
Get-Process -Id <ppid>解析主窗口句柄 - PowerShell 调用
user32!SetWindowPos设置或清除WS_EX_TOPMOST - host 读回
GetWindowLong(GWL_EXSTYLE),仅在样式位确实变化时报告成功
不修改 Electron 源码、不向主进程注入代码,也不依赖未公开 API。
兼容性与限制¶
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10 / 11 |
| 运行时 | DSH Desktop(Electron) |
| DSH | 0.2.x(dsh.client 注入),资料中在 0.2.1-rc.2 上测试 |
限制(来自官方文档):
- 只影响主窗口;欢迎页、更新对话框等不受影响。
- 若未来 DSH 改版标题栏高度或控件区域,可能需在
lib/client.js的 CSS 中调整right(当前146px)与top(当前7px)。
适用场景与注意¶
适合谁: 在 Windows 上用 DSH Desktop 做开发或运维、需要窗口长期浮在最前、又不想离开 DSH 插件生态的用户。
安装前建议: DSH 插件在 当前 dsh 进程权限 下运行;置顶会调用 Win32 API 并读写 $DSH_HOME 下的状态文件。安装前应阅读 仓库源码 与 MIT 许可证,确认符合你的安全策略。社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系,不宜当作官方应用商店。
结尾¶
dsh-always-on-top 把「窗口始终置顶」收成标题栏上的一个开关,配置走 desktop profile 的 bundles,行为透明、依赖极少。需要查阅安装细节或贡献代码时,可看目录页与 GitHub:
- 目录页:https://www.skillhub.cn/plugins/Suibianlilili/dsh-always-on-top
- GitHub:https://github.com/Suibianlilili/dsh-always-on-top