bf6.exe, управляет сессией bf6.exe в микшере. Копия aimp.exe - сессией AIMP. Одна и та же сборка, разные имена файлов.
- Rust 100%
| docs | ||
| src | ||
| .gitignore | ||
| bf6.exe | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
muter
Одной кнопкой глушит конкретное приложение в микшере громкости Windows - и той же кнопкой возвращает звук обратно.
Цель не задаётся в конфиге: программа смотрит на имя собственного exe. Копия, переименованная в bf6.exe, управляет сессией bf6.exe в микшере. Копия aimp.exe - сессией AIMP. Одна и та же сборка, разные имена файлов.
Окна нет, консоль не мигает. По желанию - подсказка у курсора на пару секунд.
Как выглядит
| Тёмная тема | Светлая тема |
|---|---|
![]() |
![]() |
Как это работает
- Берёт имя своего exe → это имя целевого процесса.
- Перебирает аудиосессии устройства вывода по умолчанию (
IAudioSessionManager2), ищет сессии, чей процесс так называется. - Ставит громкость
0.0или1.0черезISimpleAudioVolume. - Текущее состояние пишет в
.txtрядом с собой:bf6.exe→bf6.txt, где0- звук выключен,1- включён.
Файл состояния создаётся при первом запуске и пишется только после успешной работы с микшером.
Сборка
Нужен Rust с MSVC-тулчейном (x86_64-pc-windows-msvc).
cargo build --release
Готовый бинарник: target\release\muter.exe, около 175 КБ.
Установка
Скопировать бинарник куда угодно и переименовать в имя процесса, которым хочется управлять:
copy target\release\muter.exe bf6.exe
Дальше запуск bf6.exe переключает звук сессии bf6.exe. Обычно это вешается на горячую клавишу.
Параметры запуска
| Аргумент | Что делает |
|---|---|
| (без аргументов) | Переключает звук молча, ничего не показывает |
--show |
Показывает подсказку у курсора 3000 мс |
--show=N |
Показывает подсказку N миллисекунд |
--color=black |
Тёмная плашка (светлый текст) |
--color=white |
Светлая плашка (тёмный текст) |
(без --color) |
Тема берётся из настроек Windows |
Текст подсказки собирается из имени файла без расширения, в верхнем регистре: bf6.exe → BF6 звук выключен / BF6 звук включён.
Системная тема читается из HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize\AppsUseLightTheme (0 - тёмная). Ключа нет - считается светлой.
Примеры
bf6.exe :: тихо, без окна
bf6.exe --show :: подсказка 3 секунды, тема от системы
bf6.exe --show=5000 :: подсказка 5 секунд
bf6.exe --show=5000 --color=black :: 5 секунд, принудительно тёмная
bf6.exe --show --color=white :: 3 секунды, принудительно светлая
Форма через пробел (--show 5000, --color black) тоже понимается - на случай привычки.
Нечисловое значение (--show=abc) откатывается на 3000 мс. Неизвестный цвет (--color=синий) откатывается на системную тему.
Поведение окна
- Не забирает фокус (
WS_EX_NOACTIVATE) - поверх полноэкранной игры не должно её сворачивать. - Не появляется в панели задач (
WS_EX_TOOLWINDOW), всегда поверх остальных (WS_EX_TOPMOST). - Ширина подгоняется под текст.
- Если курсор у края экрана, окно сдвигается внутрь рабочей области того монитора, на котором курсор.
- Позиция берётся один раз в момент показа - за мышкой окно не ездит.
Нюансы и известные проблемы
Состояние разъезжается, если целевой процесс не запущен. Сейчас .txt перезаписывается и подсказка показывается даже тогда, когда подходящих аудиосессий не нашлось. То есть при незапущенной игре нажатие покажет BF6 звук выключен, хотя глушить было нечего, а следующее нажатие уже в игре сработает наоборот. Лечится либо счётчиком найденных сессий, либо отказом от .txt в пользу чтения реальной громкости через GetMasterVolume().
Ручной сдвиг ползунка в микшере проходит мимо. Файл состояния об этом не узнает, и следующее нажатие промахнётся.
Ищется только устройство вывода по умолчанию. Если звук игры идёт на другое устройство, сессия не найдётся.
Структура
src/main.rs весь код
Cargo.toml зависимость только windows-rs
docs/ скриншоты для README

