A Windows tray app for managing audio output/input devices and paired Bluetooth devices —
switch the default endpoint by hotkey, auto-switch to a headset the moment it connects, and
toggle each Bluetooth device's ConnectOnStart ("auto-connect") flag.
- Live device tracking — registers a Core Audio
IMMNotificationClientand a WinRTDeviceWatcher, so the app reacts to headsets connecting, docks unplugging, and Windows re-pointing the default endpoint on its own. - On-screen banner when a device connects, drops, or becomes the default. Configurable position, monitor, and duration.
- Hotkey rotation — cycle the default output/input through a chosen set of devices. Disconnected devices are skipped.
- Auto-switch rules — mark a device to become default as soon as it connects, and optionally revert to the previous device when it drops.
- Auto-connect toggle — writes
ConnectOnStartunderHKLM\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Devices\<MAC>via a small elevated helper, then restarts the Bluetooth radio or service so it takes effect. - Per-device rename and custom icons, tray quick-switch menu, start-with-Windows.
| Path | What it is |
|---|---|
src/BluetoothEditor |
The WPF app (.NET 9, net9.0-windows10.0.19041.0) |
src/BluetoothEditor.ElevatedHelper |
Console helper that runs elevated to write HKLM and restart the radio |
tests/BluetoothEditor.Tests |
xUnit tests over the pure logic (rotation, BT matching, icon guessing, sorting) |
installer/setup.iss |
Inno Setup script |
The app runs unelevated. Only the auto-connect toggle needs admin, which is why it shells out
to BluetoothEditor.ElevatedHelper.exe with runas rather than elevating the whole app.
dotnet build BluetoothEditor.sln
dotnet test BluetoothEditor.sln
Build output is not committed. To produce the portable (framework-dependent) build:
dotnet publish src/BluetoothEditor/BluetoothEditor.csproj -c Release -o publish-portable-fdd
dotnet publish src/BluetoothEditor.ElevatedHelper/BluetoothEditor.ElevatedHelper.csproj -c Release -o publish-portable-fdd
Then, for the installer (requires Inno Setup 6):
ISCC installer\setup.iss
Settings and custom icons live in %APPDATA%\BluetoothEditor\ — not next to the executable,
so they survive upgrades and work for non-admin users.
- Windows 10 2004 (build 19041) or later
- .NET 9 Desktop Runtime