Включение и отключение устройств воспроизведения и записи
Я новичок в C#.. Пожалуйста, не раздражайтесь на мой вопрос, если это немного глупо..
Мне нужно видеть отключенные устройства воспроизведения и записи по коду C# и хочу включить или отключить его в соответствии с моими потребностями. Как я могу подойти..?? Я сделал код, используя DirectX.DirectSound API, но он ограничен перечислением устройств, которые включены только, и я не могу видеть присутствующие отключенные устройства. И я не думаю, что есть какой-либо метод отключения или включения устройств.
Я буду очень благодарен вам за помощь.
И, пожалуйста, также предложите мне, как я могу сделать это с использованием других API, если это возможно.
2 ответа
Я понимаю, что это действительно очень старая тема... но я приземлился здесь, пытаясь выяснить, как составить список отключенных аудиоустройств, и я был успешным с проектом C++ под названием AudioEndpointController
Просто измените строку:
PlaybackDevice = pEnum->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &pDevices);
чтобы:
PlaybackDevice = pEnum->EnumAudioEndpoints(eRender, DEVICE_STATE_DISABLED, &pDevices);
Насколько я знаю, невозможно программно включать / отключать устройства. Что касается первой части вашего вопроса (необходимо просмотреть отключенные устройства), это на самом деле возможно, но не с использованием только 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.