Windows 托盘工具
每个应用一个音量,
一次点击搞定。
Chrome 30%,Teams 70%,Spotify 20%。不用每次打开音量合成器逐个调整,一个配置档就能全部还原。托盘菜单两次点击,管理界面里一个滑块。
点击托盘图标打开的管理界面。同样的值也能直接从菜单里改。
能做什么
过去在音量合成器里做的事,现在从托盘两次点击完成。
应用级音量与静音
把正在发声的会话按应用归并显示。像 Chrome 这样有多个进程的应用也只占一行。
每个应用不同的输出设备
游戏走扬声器,Discord 走耳机。默认输出设备也能直接从菜单切换,配置档会把设备一起保存。
关掉应用再打开依然保持
记住每个应用的音量,等那个应用 再次播放时 自动还原。拔插设备、从睡眠唤醒,也会重新套用配置档。
麦克风也在同一只手里
开会时最急的那个按钮。 CtrlAltK 一次就能开关麦克风。
管理界面
编辑配置档、修改快捷键、编写自动化规则,全都在界面里完成。不必手动改设置文件。
出去的只有你打开的
匿名使用报告、检查更新、开发者通知,就这三项,而且 全部默认关闭。管理界面只在 127.0.0.1 上开放,还需要每次运行新生成的令牌才能打开。
配置档
情况变了,所有应用的音量也该跟着变。
默认内置三个,也可以把当前状态直接存成新的配置档。自动切换(应用启动、设备接入、时间段)默认关闭。
| 配置档 | 主音量 | 应用设置 |
|---|---|---|
| Work | 72% | Chrome 30% · Teams 70% · Spotify 20% |
| Gaming | 80% | Discord 65% · Spotify 15% · 浏览器静音 |
| Meeting | 60% | Teams 80% · Zoom 80% · Chrome 20% · Spotify 静音 |
快捷键
当手已经放在键盘上时。
全部可以改,如果别的程序已经占用了组合键,会明确告诉你,而不是悄悄失败。
- CtrlAlt↑ 调高主音量
- CtrlAlt↓ 调低主音量
- CtrlAltM 静音
- CtrlAltK 麦克风静音
- CtrlAltS 弹出界面
- CtrlAlt1–3 切换配置档
应用级路由
Windows 没有写进文档的那条路, 先验证 再使用。
实测
「只让这个应用走耳机」没有公开 API。必须调用 Windows 设置应用所用的内部接口 Windows.Media.Internal.AudioPolicyConfig ,而它的接口 ID 和 vtable 布局在每个版本里都不一样。SoundDesk 不靠猜测使用它。
危险的第一次调用放在 独立进程里执行,即使崩溃托盘也能存活;真正移动应用之后再用 Get 读回,只有读到同一个设备才升级为「已验证」。读回结果不一致时,功能会自行关闭并打开 Windows 设置页面。
| 状态 | 依据 |
|---|---|
| verified | 确实移动了进程,读回的 endpoint id 一致。如果没有任何应用在播放,自检会用无声流给自己建一个会话,用自己来验证 |
| probable | 没能造出可供读回的对象 — 只能确认工厂激活和 vtable 调用没有崩溃 |
| unsupported | 自检失败,或调用成功但 Windows 未生效 → 引导至设置页面 |
安全
即使从下载文件夹直接运行也安全。
这些是便携式可执行文件真正会遇到的问题。不是抽象的检查清单,每一条都有对应的代码和测试。
| 威胁 | 应对 |
|---|---|
| DLL 劫持 放在 exe 旁边的伪造 DLL |
系统 DLL 只以 System32 绝对路径加载。启动时把 exe 所在文件夹和工作目录从搜索路径中移除 |
| 互斥体抢占 其他会话抢先占用名称,阻止启动 |
把单实例对象放在 Local\ 命名空间 |
| 通过设置文件注入 | 只有通过正则校验的 endpoint id 才会传入 COM 调用 |
| 伪造日志 在进程名里塞入换行以插入假日志 |
应用名和设备名先去掉控制字符,再限制长度 |
| 没有引号的自启动路径 | Run 键的值始终是用引号括起的绝对路径,且只用 HKCU 。 |
| 对管理界面的越权操作 同一台电脑上的其他程序,或网页 |
127.0.0.1 专用 + 每次运行生成新的 256 位令牌 + Host 与 Origin 校验。令牌在首次加载时变成 HttpOnly Cookie,从地址栏消失 |
隐私
只有你打开的才会出去。
应用名和会话信息只在本机处理,设置仅保存为一个 JSON 文件。会对外通信的功能只有三项 — 匿名使用报告、检查更新、开发者通知 — 且全部默认关闭。在管理界面里打开之前,一个请求也不会发出。
| 设置文件 | %APPDATA%\SoundDesk\config.json |
|---|---|
| 日志 | %APPDATA%\SoundDesk\sounddesk.log |
| 匿名使用报告 | 默认关闭 — 打开后每天一次,发送随机安装 id、版本、Windows 版本号、语言,以及三个计数 |
| 检查更新 · 开发者通知 | 默认关闭 — 打开后只发送运行中的版本和语言。不发送安装 id |
| 绝对不会发出的内容 | 应用名 · 设备名 · 文件路径 · Windows 账户名 |
| 使用的 API | IMMDeviceEnumerator · 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
在哪里都一样
用你的语言,在你的电脑上。
同一套设置在家里和公司通用,用你的语言阅读,需要时从宏里调用。
12 种语言
跟随 Windows 显示语言。也可以自己选,改了之后管理界面和托盘菜单无需重启就地切换。
한국어 · English · 日本語 · 简体中文 · 繁體中文 · Español · Português · Français · Deutsch · Русский · Italiano · Tiếng Việt
家里和公司,同一套设置
把配置档、快捷键、规则导出成一个文件,在另一台电脑上导入。设备按 名称 匹配 — 同一副耳机在每台电脑上的 id 都不同,直接复制文件会让路由悄悄消失。本机没有的设备会告诉你名称。
从宏里调用
在 Stream Deck 按钮或一行 AutoHotkey 里直接使用。托盘开着或没开都能工作,也不会再弹一个图标。有变化返回退出码 0,什么都没匹配返回 1。
SoundDesk.exe --set-app chrome.exe=25
SoundDesk.exe --profile Gaming
SoundDesk.exe --list apps
安装
一个文件。没有安装程序。
SoundDesk.exe 放在任何你喜欢的位置运行,托盘上就会出现图标。想删除时,删掉文件和设置文件夹即可。不需要 Python。