Как я могу уведомить свое приложение об изменении устройства воспроизведения звука по умолчанию? - PullRequest
1 голос
/ 15 апреля 2011

У меня есть две звуковые карты на моем компьютере с Windows XP SP3, и я написал приложение на C ++, с помощью которого я меняю устройство воспроизведения по умолчанию, редактируя следующую запись реестра:

regKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Multimedia\Sound Mapper", true);

Мое приложение изменяет значение клавиши «Воспроизведение» в целях использования первой или второй звуковой карты в качестве устройства воспроизведения по умолчанию.

Проблема в том, что когда я меняю устройство по умолчанию, приложение все еще использует старое (которое было установлено по умолчанию при запуске программы). Если после изменения я снова запускаю приложение, все работает нормально, и я могу использовать «новое» устройство воспроизведения по умолчанию.

Как я могу "сказать" для моего приложения, что я сменил устройство по умолчанию? Каким образом приложение считывает и сохраняет переменную при запуске, какое звуковое устройство по умолчанию в Windows? Есть ли решение для моей проблемы?

1 Ответ

2 голосов
/ 15 апреля 2011

Реестр - это, по сути, база данных, в которой хранятся настройки по умолчанию. Изменение значений в реестре не приводит к тому, что ни приложение, ни сама Windows повторно инициализируют свои настройки с новыми, обновленными значениями. Рэймонд Чен обсуждает эту самую вещь со ссылкой на настройки пользовательского интерфейса .

Также учтите, что подобные вещи могут измениться в более поздних версиях Windows. Если вы когда-нибудь решите обновить систему до Windows Vista или 7, вы вернетесь сюда снова и зададите дополнительные вопросы, потому что ваше приложение для переключения звука больше не будет работать. Более поздние версии обрабатывают аудиоустройства совсем иначе, чем в XP; Для начала, они основаны на Core Audio APIs .

Поэтому, по очевидным причинам, изменение значений реестра не является предпочтительным способом изменения конфигурации вашего компьютера.

Но если вы просто пытаетесь уведомить определенное приложение о том, что вы изменили значение в реестре, простое решение - это RegNotifyChangeKeyValue функция . По сути, это подписывает приложение на получение уведомлений каждый раз, когда изменяется значение определенного раздела реестра.

Правильное решение для Windows Vista и более поздних версий доступно здесь .

...