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 所在資料夾與工作目錄從搜尋路徑中移除
Mutex 搶佔
其他工作階段搶先佔用名稱,阻止啟動
把單一執行個體物件放在 Local\ 命名空間
透過設定檔案注入 只有通過正規表示式驗證的 endpoint id 才會傳入 COM 呼叫
偽造記錄
在處理程序名稱裡塞入換行以插入假記錄
程式與裝置名稱先移除控制字元,再限制長度
沒有引號的自動啟動路徑 Run 機碼的值一律是用引號括起的絕對路徑,且只用 HKCU
對管理介面的越權操作
同一台電腦上的其他程式,或網頁
127.0.0.1 專用 + 每次執行產生新的 256 位元權杖 + Host 與 Origin 檢查。權杖在首次載入時變成 HttpOnly Cookie,從網址列消失

696 項測試 · 涵蓋率 84% 包含放入偽造 DLL、實際驗證是否被擋下的實機測試 以 PROJECTTEAMFORYOU 進行程式碼簽署 · 執行前請核對發行者名稱

隱私

只有你開啟的才會出去。

程式名稱與工作階段資訊只在本機處理,設定僅保存為一個 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