C# Как программно изменить устройство воспроизведения

Как я могу программно изменить аудиоустройство по умолчанию в системе Vista/Win 7? Используя С# или вызов Win API?


person JL.    schedule 12.10.2009    source источник
comment
Это в основном дубликат stackoverflow.com/questions/1334076/ кроме устройств ввода и вывода, в любом случае для него нет API в Vista+, если только вы не хотите декомпилировать медиацентр и найти недокументированный материал   -  person Anders    schedule 05.01.2011


Ответы (1)


WinMM API должен предоставлять запрашиваемую вами функциональность.

Вы должны использовать сообщение DRVM_MAPPER_PREFERRED_SET, которое отправляется функцией waveOutMessage().

Документация: http://msdn.microsoft.com/en-us/library/aa909789.aspx

Тем не менее, если вы пытаетесь отправить сигнал самостоятельно, вам следует обратиться к библиотеке WinMM.Net.

http://winmm.codeplex.com

person John Gietzen    schedule 12.10.2009
comment
Все, что мне нужно сделать, это изменить звуковое устройство в Windows, чтобы весь звук проходил через это устройство. По сути, в моей системе много звуковых устройств, и я хочу заменить приложение системного трея по умолчанию, чтобы мне не нужно было щелкать правой кнопкой мыши и открывать диспетчер устройств каждый раз, когда мне нужно переключить устройство. Будет ли этот API делать это? - person JL.; 12.10.2009
comment
Да, вы можете установить устройство воспроизведения звука по умолчанию в XP с помощью сообщения DRVM_MAPPER_PREFERRED_SET, которое отправляется с помощью waveOutMessage(). Это не работает в Висте. Я исследую. - person John Gietzen; 12.10.2009
comment
Спасибо, я думаю, что эта последняя ссылка будет работать, она должна быть портирована на win 7, надеюсь! - person JL.; 12.10.2009
comment
Нравится последняя ссылка! В Win7 мне приходилось запускать диалоговое окно «Устройства воспроизведения» каждый раз, когда я хочу переключиться с наушников на динамики и наоборот. Сейчас гораздо проще. Спасибо! - person Ecyrb; 05.01.2010
comment
@Ecyrb, как именно ты это сделал? WinMM.net, похоже, не имеет функции waveOutMessage. На самом деле импорт нативной библиотеки для waveOutMessage окружен директивой препроцессора #if false. - person Alexander; 15.04.2011
comment
Джонатан Сэмпсон удалил ссылку на vistaaudiochanger.com, поскольку она неактивна. Это отстой. Я не играл с WinMM.net. - person Ecyrb; 16.04.2011
comment
На самом деле DRVM_MAPPER_PREFERRED_SET не работает даже на XP, net-pro.aspx" rel="nofollow noreferrer">возвращает MMSYSERR_INVALPARAM. И в документации, на которую вы ссылаетесь, четко указано, что она предназначена для Windows Mobile. - person user; 23.02.2016