Включение и отключение устройств воспроизведения и записи

Я новичок в C # .. Пожалуйста, не раздражайтесь на мой вопрос, если он какой-то глупый ..

Мне нужно увидеть отключенные устройства воспроизведения и записи с помощью кода С # и я хочу включить или отключить их в соответствии с моими потребностями. Как я могу подойти .. ?? Я создал код с использованием API DirectX.DirectSound, но он ограничен перечислением только включенных устройств, и я не могу видеть присутствующие отключенные устройства. И я не думаю, что есть какой-либо метод отключения или включения устройств.

Буду очень благодарен вам за помощь.

И, пожалуйста, также предложите мне, как я могу сделать это с помощью других API, если это возможно.


person Amit Arya    schedule 05.06.2013    source источник


Ответы (2)


Я понимаю, что это действительно очень старый поток ... но я приземлился здесь, пытаясь выяснить, как вывести список отключенных аудиоустройств, и мне удалось реализовать проект C ++ под названием AudioEndpointController

Просто измените строку:

PlaybackDevice = pEnum->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &pDevices);

to:

PlaybackDevice = pEnum->EnumAudioEndpoints(eRender, DEVICE_STATE_DISABLED, &pDevices);
person Tick    schedule 04.05.2016

Насколько мне известно, невозможно программно включать / отключать устройства. Что касается первой части вашего вопроса (необходимо увидеть отключенные устройства), это на самом деле возможно, но не с использованием только C #, вам придется использовать для этого WASAPI либо с помощью C ++ / CLI, либо с помощью явного PInvoke в C #. Вы ищете IMMDeviceEnumerator :: EnumAudioEndpoints, который принимает флаг, указывающий, хотите ли вы видеть отключенные / отключенные и т. Д. Устройства. См. http://msdn.microsoft.com/en-us/library/windows/desktop/dd371400%28v=vs.85%29.aspx. Преимущество интерфейса IMMDevice WASAPI в этом случае заключается в том, что он предоставляет GUID, который соответствует идентификатору DirectSound устройства, поэтому вы можете использовать WASAPI для определения, какие устройства активны / неактивны и т. Д., И выполнять все остальные действия с помощью DirectSound. Для этого вы захотите использовать IMMDevice :: OpenPropertyStore и запросить свойство PKEY_AudioEndpoint_GUID. Это то же самое, что передается в функцию DirectSound DSEnumCallback.

person Sjoerd van Kreel    schedule 05.06.2013
comment
Хотя Microsoft не позволяет этого, но каким-то образом мне удалось сделать это через бэкдор через редактирование реестра. В любом случае спасибо за ответ! Ваше здоровье! - person Amit Arya; 07.08.2013
comment
@AmitArya, я тоже хочу записывать системный звук во время записи экрана рабочего стола. Я не знаю, как сделать запись с обратной связью, как вам это удалось. не могли бы вы мне сказать? - person Amogh; 24.02.2016
comment
Для редактирования реестра @AmitArya потребуются права администратора? есть другой способ? - person Ebram; 23.10.2018