获取audio设备列表,并select一个使用c#

您好我正在使用C#在Windows中创build一个基于桌面的应用程序。

我必须在两个不同的combobox中列出所有可用的audio和video设备。 从combobox中select任何设备会将该特定设备设置为默认设备

我正在使用WMI。

获取可用audio设备列表的代码:

ManagementObjectSearcher mo = new ManagementObjectSearcher("select * from Win32_SoundDevice"); foreach (ManagementObject soundDevice in mo.Get()) { String deviceId = soundDevice.GetPropertyValue("DeviceId").ToString(); String name = soundDevice.GetPropertyValue("Name").ToString(); //saving the name and device id in array } 

如果我尝试设置这样的设备:

  using (RegistryKey audioDeviceKey = Registry.LocalMachine.OpenSubKey(audioDevicesReg + @"\" + audioDeviceList.SelectedText.ToString(), true)){} 

我得到例外:

 System.Security.SecurityException occurred in mscorlib.dll 

现在我有几个问题:

 1) How to set the selected device as the default audio device? 2) The array contains device name as : "High Definition audio device" even when I have attached a headset. 3) I want the list as speaker,headset etc...How to get that? 

有人可以指出我的方向吗?

Solutions Collecting From Web of "获取audio设备列表,并select一个使用c#"

  1. 没有记录的机制来更改默认的音频设备。
  2. 这是因为您正在枚举物理音频设备,而不是音频端点。
  3. 您想要使用IMMDeviceEnumerator API来枚举音频端点(扬声器等)。

不幸的是,Microsoft没有为IMMDeviceEnumerator API发布托管互操作,您需要定义自己的(互联网上有几个定义)。

我对这个问题的回答太迟了,但对别人可能有帮助。

Lync 2013 SDK提供DeviceManager类,列出集合中的所有音频和视频设备

LyncClient.GetClient().DeviceManager.AudioDevices枚举系统上的所有音频设备

LyncClient.GetClient().DeviceManager.VideoDevices枚举系统上的所有视频设备

所以,可以将设备设置为:

 LyncClient client = LyncClient.GetClient(); DeviceManager dm = client.DeviceManager; dm.ActiveAudioDevice = (AudioDevice)dm.AudioDevices[0]; //or any other found after foreach dm.ActiveVideoDevice = (VideoDevice)dm.VideoDevices[0]; //or any other found after foreach 

HTH。