您好我正在使用C#在Windows中创建基于桌面的应用程序。
我必须显示所有可用音频的列表& 2个不同组合框中的视频设备。 从组合框中选择任何设备会将该特定设备设置为默认设备
我正在使用WMI。
获取可用音频设备列表的代码:
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?
任何人都能指出我正确的方向吗?
答案 0 :(得分:2)
不幸的是,Microsoft没有为IMMDeviceEnumerator API发布托管互操作,您需要自己定义(互联网上有几个定义)。
答案 1 :(得分:2)
我对这个问题的回答太迟了......但对其他人来说可能会有所帮助。
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。