c# - 列出连接到 Windows PC 的所有 USB 音频耳机

标签 c# windows

我想使用 C# 检索连接到 PC 的 USB 耳机设备。我尝试了以下解决方案但没有奏效:

解决方案 1: How to enumerate audio out devices in c#

我试过了,但设备名称显示为“(通用 USB 音频)”,而不是实际名称。

解决方案 2: How to get the default audio device?

解决方案 3: Detecting Audio Input & output devices connected to system

解决方案 2 和解决方案 3 给出了以下结果: 设备名称被截断为 31 个字符。 例如:“麦克风(森海塞尔 VOICE 689”

enter image description here

****问:有什么办法可以得到设备的完整名称吗?****

最佳答案

如果您知道它是一个 USB 音频设备,并且假设驱动程序是为该设备正确编写的,您可以这样做:

foreach (ManagementObject drive in
    new ManagementObjectSearcher(
        "select Name from Win32_USBDevice where Service='usbaudio'").Get())
{
    {
        string s = drive["Name"].ToString();
        // Continue
    }
}

添加 你只能得到 31 个字符(技术上是 32 个),因为 native .DLL 的 PInvoke 使用 char[32],所以它不能返回更多;您不会从解决方案 1 和 2 中得到所需的东西。

此外,我不知道您为什么不能使用 Win32_USBDevice,因为我也在使用 Win7 x64,而且我没有遇到任何问题。 This链接可能对您有帮助。

可能的替代方案 您可以使用 Win32_PnPEntity 类:

foreach (ManagementObject drive in
    new ManagementObjectSearcher(
        "select Name from Win32_PnPEntity where Service='usbaudio'").Get())
{
    {
        string s = drive["Name"].ToString();
        // Continue.  Can look at Description, Caption, etc. too
    }
}

关于c# - 列出连接到 Windows PC 的所有 USB 音频耳机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24023944/

相关文章:

c# - 如何在 ASP .NET Core 中生成和管理 API key

c# - 多个异步数据消费者的事件与 RegisterWaitForSingleObject

c# - 在 GridView 中显示列表

windows - 在 PowerShell 中使用 sudo 和 SSH-Session

c++ - 如何使用 SDL 在两个独立的声卡上播放声音?

c# - Entity Framework - 循环遍历属性以进行更新

c# - 一个属性返回另一个类的成员而不是在构造函数中设置属性有什么好处吗?

windows - 缺少 meta 和 alt 键?

c++ - 线程间通信。如何向另一个线程发送信号

windows - 在 Windows 上从 Matlab 编译 .sh 文件