c# - C#如何获取声音输入的名称

标签 c# wpf windows audio input

我想通过此代码获得声音输入的用户友好名称,但它只能给我名称的前32个字符,但我希望它完整。

[DllImport("winmm.dll", SetLastError = true)]
static extern uint waveInGetNumDevs();

[DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern uint waveInGetDevCaps(uint hwo, ref WAVEOUTCAPS pwoc, uint cbwoc);

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct WAVEOUTCAPS
{
    public ushort wMid;
    public ushort wPid;
    public uint vDriverVersion;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
    public string szPname;
    public uint dwFormats;
    public ushort wChannels;
    public ushort wReserved1;
    public uint dwSupport;
}

public static string[] GetSoundDevices()
{
    uint devices = waveInGetNumDevs();
    string[] result = new string[devices];
    WAVEOUTCAPS caps = new WAVEOUTCAPS();
    using (StreamWriter sw = new StreamWriter("appdata/audio/name"))
    {
        for (uint i = 0; i < devices; i++)
        {
            waveInGetDevCaps(i, ref caps, (uint)Marshal.SizeOf(caps));
            result[i] = caps.szPname;
            sw.WriteLine(caps.szPname);
        }
        return result;
    }
}

我需要以下声音输入名称:

但是这段代码只给我这样的:

感谢你们!

最佳答案

您可能必须使用管理界面:

ManagementObjectSearcher objSearcher = new ManagementObjectSearcher(
           "SELECT * FROM Win32_SoundDevice");

    ManagementObjectCollection objCollection = objSearcher.Get();

    foreach (ManagementObject obj in objCollection)
    {
        foreach (PropertyData property in obj.Properties)
        {
            Console.Out.WriteLine(String.Format("{0}:{1}", property.Name, property.Value));
        }
    }

资料来源:How to enumerate audio out devices in c#

关于c# - C#如何获取声音输入的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29967317/

相关文章:

c++ - Windows:C++:从文件重定向到串口(输入)

c# - RSACryptoServiceProvider 使用自己的公钥和私钥初始化

c# string.format 删除我的引号

c# - 在VBA中编译支持声明函数的dll

c# - 如何以编程方式选择 ListView 中的项目?

c# - 无法使用 String.Format 在 WPF 中显示版本字符串

c# - 将事件从自定义控件传播到窗体

c# - 为什么 WPF 使用 HTML/HEX 颜色?

Windows 中缺少 conio.h

c++ - wcscat_s 函数 - 缓冲区错误