SoundDesk

Windows 托盘工具

每个应用一个音量,
一次点击搞定。

Chrome 30%,Teams 70%,Spotify 20%。不用每次打开音量合成器逐个调整,一个配置档就能全部还原。托盘菜单两次点击,管理界面里一个滑块。

Windows 10 · 11无需安装,单个可执行文件对外通信默认关闭

点击托盘图标打开的管理界面。同样的值也能直接从菜单里改。

能做什么

过去在音量合成器里做的事,现在从托盘两次点击完成。

01

应用级音量与静音

把正在发声的会话按应用归并显示。像 Chrome 这样有多个进程的应用也只占一行。

02

每个应用不同的输出设备

游戏走扬声器,Discord 走耳机。默认输出设备也能直接从菜单切换,配置档会把设备一起保存。

03

关掉应用再打开依然保持

记住每个应用的音量,等那个应用 再次播放时 自动还原。拔插设备、从睡眠唤醒,也会重新套用配置档。

04

麦克风也在同一只手里

开会时最急的那个按钮。 CtrlAltK 一次就能开关麦克风。

05

管理界面

编辑配置档、修改快捷键、编写自动化规则,全都在界面里完成。不必手动改设置文件。

06

出去的只有你打开的

匿名使用报告、检查更新、开发者通知,就这三项,而且 全部默认关闭。管理界面只在 127.0.0.1 上开放,还需要每次运行新生成的令牌才能打开。

配置档

情况变了,所有应用的音量也该跟着变。

默认内置三个,也可以把当前状态直接存成新的配置档。自动切换(应用启动、设备接入、时间段)默认关闭。

内置配置档
配置档主音量应用设置
Work72%Chrome 30% · Teams 70% · Spotify 20%
Gaming80%Discord 65% · Spotify 15% · 浏览器静音
Meeting60%Teams 80% · Zoom 80% · Chrome 20% · Spotify 静音

快捷键

当手已经放在键盘上时。

全部可以改,如果别的程序已经占用了组合键,会明确告诉你,而不是悄悄失败。

  • CtrlAlt 调高主音量
  • CtrlAlt 调低主音量
  • CtrlAltM 静音
  • CtrlAltK 麦克风静音
  • CtrlAltS 弹出界面
  • CtrlAlt13 切换配置档

应用级路由

Windows 没有写进文档的那条路, 先验证 再使用。

实测

「只让这个应用走耳机」没有公开 API。必须调用 Windows 设置应用所用的内部接口 Windows.Media.Internal.AudioPolicyConfig ,而它的接口 ID 和 vtable 布局在每个版本里都不一样。SoundDesk 不靠猜测使用它。

危险的第一次调用放在 独立进程里执行,即使崩溃托盘也能存活;真正移动应用之后再用 Get 读回,只有读到同一个设备才升级为「已验证」。读回结果不一致时,功能会自行关闭并打开 Windows 设置页面。

判定等级
状态依据
verified确实移动了进程,读回的 endpoint id 一致。如果没有任何应用在播放,自检会用无声流给自己建一个会话,用自己来验证
probable没能造出可供读回的对象 — 只能确认工厂激活和 vtable 调用没有崩溃
unsupported自检失败,或调用成功但 Windows 未生效 → 引导至设置页面

在 Windows 10 22H2 版本 19045 上 verified 确认 判定结果与版本号一起保存,系统更新后重新检查

安全

即使从下载文件夹直接运行也安全。

这些是便携式可执行文件真正会遇到的问题。不是抽象的检查清单,每一条都有对应的代码和测试。

威胁应对
DLL 劫持
放在 exe 旁边的伪造 DLL
系统 DLL 只以 System32 绝对路径加载。启动时把 exe 所在文件夹和工作目录从搜索路径中移除
互斥体抢占
其他会话抢先占用名称,阻止启动
把单实例对象放在 Local\ 命名空间
通过设置文件注入 只有通过正则校验的 endpoint id 才会传入 COM 调用
伪造日志
在进程名里塞入换行以插入假日志
应用名和设备名先去掉控制字符,再限制长度
没有引号的自启动路径 Run 键的值始终是用引号括起的绝对路径,且只用 HKCU
对管理界面的越权操作
同一台电脑上的其他程序,或网页
127.0.0.1 专用 + 每次运行生成新的 256 位令牌 + Host 与 Origin 校验。令牌在首次加载时变成 HttpOnly Cookie,从地址栏消失

696 项测试 · 覆盖率 84% 包含放入伪造 DLL、实际验证是否被拦截的真实测试 使用 Azure Trusted Signing 签名 · 证书较新,SmartScreen 可能会警告一段时间

隐私

只有你打开的才会出去。

应用名和会话信息只在本机处理,设置仅保存为一个 JSON 文件。会对外通信的功能只有三项 — 匿名使用报告、检查更新、开发者通知 — 且全部默认关闭。在管理界面里打开之前,一个请求也不会发出。

设置文件%APPDATA%\SoundDesk\config.json
日志%APPDATA%\SoundDesk\sounddesk.log
匿名使用报告默认关闭 — 打开后每天一次,发送随机安装 id、版本、Windows 版本号、语言,以及三个计数
检查更新 · 开发者通知默认关闭 — 打开后只发送运行中的版本和语言。不发送安装 id
绝对不会发出的内容应用名 · 设备名 · 文件路径 · Windows 账户名
使用的 APIIMMDeviceEnumerator · IAudioSessionManager2 · ISimpleAudioVolume · IPolicyConfig · AudioPolicyConfig
自启动HKCU\Software\Microsoft\Windows\CurrentVersion\Run(可选)

自检

在你的电脑上能不能用,直接问这个应用。

把自己的功能逐项放到真实音频栈上跑一遍, 动过的都会还原。会发出声音的改动根本不做 — 主音量是把当前值原样重写一次,只证明调用路径是通的。

命令检查什么
--selftest-audio 设备 · 主音量 · 麦克风 · 应用级音量/静音/路由 · 配置档 · 全局快捷键。没有应用在播放时,路由用它自己的无声会话来验证
--selftest-panel 打包后的可执行文件是否真的能提供管理界面
--report 以 JSON 输出设备、会话与配置档现状

这台电脑上的结果

OK  应用级音量(firefox.exe 100% → 42% → 还原)
OK  应用级静音
OK  应用级输出路由(firefox.exe → ASUS VZ279 → 还原)
OK  默认设备切换 · 配置档 · 全局快捷键
—   麦克风(本机没有输入设备)

11 passed, 0 failed, 2 skipped — Windows 10 22H2 版本 19045

在哪里都一样

用你的语言,在你的电脑上。

同一套设置在家里和公司通用,用你的语言阅读,需要时从宏里调用。

01

12 种语言

跟随 Windows 显示语言。也可以自己选,改了之后管理界面和托盘菜单无需重启就地切换。

한국어 · English · 日本語 · 简体中文 · 繁體中文 · Español · Português · Français · Deutsch · Русский · Italiano · Tiếng Việt

02

家里和公司,同一套设置

把配置档、快捷键、规则导出成一个文件,在另一台电脑上导入。设备按 名称 匹配 — 同一副耳机在每台电脑上的 id 都不同,直接复制文件会让路由悄悄消失。本机没有的设备会告诉你名称。

03

从宏里调用

在 Stream Deck 按钮或一行 AutoHotkey 里直接使用。托盘开着或没开都能工作,也不会再弹一个图标。有变化返回退出码 0,什么都没匹配返回 1。

SoundDesk.exe --set-app chrome.exe=25
SoundDesk.exe --profile Gaming
SoundDesk.exe --list apps

安装

一个文件。没有安装程序。

SoundDesk.exe 放在任何你喜欢的位置运行,托盘上就会出现图标。想删除时,删掉文件和设置文件夹即可。不需要 Python。

下载 SoundDesk.exe

21.9 MB · 已代码签名SHA-256

再看一次

Windows 10 1803 及以上单个可执行文件无需管理员权限附带 SHA-256