2013-06-05 5 views
0

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

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

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

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

ответ

0

Насколько я знаю, невозможно программно включить/отключить устройства. Что касается первой части вашего вопроса (нужно видеть отключенные устройства), это на самом деле возможно, но не используя только 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.

+0

Хотя Microsoft оленья кожа позволяет это, но как-то мне удалось сделать это через бэкдор запись через редактирование реестра. Спасибо за ответ в любом случае! Ура! –

+0

@AmitArya, я также хочу записать системный звук во время записи рабочего стола. Я не знаю, как делать петлевые записи, как вам это удалось. не могли бы вы рассказать мне? – Amogh

1

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

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

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

к:

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