检测连接到系统的音频输入和输出设备

本文关键字:输入 输出设备 音频 连接 系统 检测 | 更新日期: 2023-09-27 17:55:26

我想找出在 C#.net 中有多少音频输入和输出设备连接到我的系统

请提出任何建议。

谢谢。

检测连接到系统的音频输入和输出设备

您需要访问必要的 Windows API 函数。

此类应该可以帮助您入门 - Win32.GetSoundDevices 返回设备名称列表。在 Windows SDK 中查找 WAVEOUTCAPS,了解您可以获得的其他信息的详细信息。

public class Win32 {
    [DllImport("winmm.dll", SetLastError=true)]
    static extern uint waveOutGetNumDevs();
    [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern uint waveOutGetDevCaps(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 = 32)]
        public string szPname;
        public uint dwFormats;
        public ushort wChannels;
        public ushort wReserved1;
        public uint dwSupport;
    }
    public static string [] GetSoundDevices() {
        uint devices = waveOutGetNumDevs();
        string [] result = new string[devices];
        WAVEOUTCAPS caps = new WAVEOUTCAPS();
        for(uint i = 0; i < devices; i++) {
            waveOutGetDevCaps(i, ref caps, (uint)Marshal.SizeOf(caps));
            result[i] = caps.szPname;
        }
        return result;
    }

}