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 所在資料夾與工作目錄從搜尋路徑中移除 |
| Mutex 搶佔 其他工作階段搶先佔用名稱,阻止啟動 |
把單一執行個體物件放在 Local\ 命名空間 |
| 透過設定檔案注入 | 只有通過正規表示式驗證的 endpoint id 才會傳入 COM 呼叫 |
| 偽造記錄 在處理程序名稱裡塞入換行以插入假記錄 |
程式與裝置名稱先移除控制字元,再限制長度 |
| 沒有引號的自動啟動路徑 | Run 機碼的值一律是用引號括起的絕對路徑,且只用 HKCU。 |
| 對控制台的越權操作 同一台電腦上的其他程式,或網頁 |
127.0.0.1 專用 + 每次執行產生新的 256 位元權杖 + Host 與 Origin 檢查。權杖在首次載入時變成 HttpOnly Cookie,從網址列消失 |
隱私
離開這台電腦的只有三樣,而且都寫在這裡。
程式名稱和工作階段資訊在本機處理,設定只是一個 JSON 檔案。 會連上網際網路的功能只有三個 —— 自動更新、匿名使用報告、開發者通知。手機遙控器在你親手開啟之前一直是關閉的,開啟後也只會在同一個私人網路內,把程式名稱顯示給已配對的手機。 只有自動更新預設開啟:先詢問是否有新版本,有就下載,再詢問是否安裝。只傳送執行中的版本號和語言,不傳送安裝 id,而且可以在控制台關閉。另外兩個在你開啟之前一直安靜。
| 設定檔案 | %APPDATA%\SoundDesk\config.json |
|---|---|
| 記錄 | %APPDATA%\SoundDesk\sounddesk.log |
| 自動更新 | 預設開啟 —— 每次啟動一次,只有執行中的版本號和語言。不傳送安裝 id。新版本下載後會讓 Windows 核對簽章是否為 PROJECTTEAMFORYOU,安裝需要你點擊 |
| 匿名使用回報 | 預設關閉 — 開啟後每天一次,送出隨機安裝 id、版本、Windows 組建、語言,以及三個計數 |
| 開發者通知 | 預設關閉 —— 開啟後只傳送執行中的版本號和語言 |
| 絕對不會送出的內容 | 程式名稱 · 裝置名稱 · 檔案路徑 · 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。
瀏覽器可能會攔截它,提示「可疑下載」。這表示下載過它的人還很少,而不是檔案有問題。Chrome 請在下載清單點 ⋮ 選擇「繼續」;若是 Windows 攔截,選「其他資訊」→「執行」。真正能驗證的只有兩點:發行者名稱是否為 PROJECTTEAMFORYOU,以及上面的 SHA-256 是否與你收到的檔案一致。下載的人多了,這個提示就會消失。
變更紀錄
什麼時候改了什麼。
時間均為韓國標準時間(KST)。完整紀錄在儲存庫的變更紀錄檔中。
-
v1.7.0 最新
- 手機遙控器。同一 Wi-Fi 下的 Android 手機(SoundDesk Remote)可以控制音量、靜音、輸出裝置和設定檔。預設關閉;開啟後,只有用 QR 碼配對過的手機才能連線,而且只能來自私人網路內部。
- 隱私權政策和使用條款已提供 12 種語言版本。
-
v1.6.0
- 自動更新。有新版本時先下載,再詢問是否安裝。預設開啟,可在設定中關閉。
- 下載的檔案必須同時通過公開雜湊和簽章核對,安裝的那一刻還會再核對一次簽章。
-
v1.5.0
- 主音量、麥克風以及每個正在播放的程式下方,都會畫出目前的聲音大小。
- 指定單一程式的全域快速鍵。開會時只靜音某一個程式,不必打開控制台。
- 自動調低 —— 選定的程式發出聲音時調低其他程式,安靜後再恢復。
-
v1.4.0
- 提供執行檔和 zip 兩種。裡面的位元組相同,各自附有雜湊值。
- 程式知道自己的網址 —— 從系統匣選單或控制台的「關於」開啟。
- 到達頁統一為一套字體,檔案從 870KB 降到 225KB。
-
v1.3.0
- 設定檔現在可以宣告「這個程式跟隨預設裝置」。
- 本頁面以十二種語言發布。