Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows中检测笔记本电脑上的耳机_C#_.net_Windows_Desktop Application_Naudio - Fatal编程技术网

C# 在Windows中检测笔记本电脑上的耳机

C# 在Windows中检测笔记本电脑上的耳机,c#,.net,windows,desktop-application,naudio,C#,.net,Windows,Desktop Application,Naudio,我目前正在使用一个Windows桌面应用程序,如果连接的音频设备发生任何更改,该应用程序将收到通知 我目前正在通过软件包以以下方式使用核心音频接口API: NAudio.CoreAudioApi.MMDeviceEnumerator enumerator; public void PopulateAudioDevices() { enumerator = new NAudio.CoreAudioApi.MMDeviceEnumerator(); var endpoint

我目前正在使用一个Windows桌面应用程序,如果连接的音频设备发生任何更改,该应用程序将收到通知

我目前正在通过软件包以以下方式使用核心音频接口API:

NAudio.CoreAudioApi.MMDeviceEnumerator enumerator;   

public void PopulateAudioDevices()
{
    enumerator = new NAudio.CoreAudioApi.MMDeviceEnumerator();

    var endpoints = enumerator.EnumerateAudioEndPoints(
        DataFlow.Render,
        DeviceState.Unplugged | DeviceState.Active);
}

protected override void OnStart()
{
    PopulateAudioDevices();

    if (enumerator != null)
    {
        enumerator.RegisterEndpointNotificationCallback(this);
    }
}

public void OnDeviceStateChanged(string deviceId, DeviceState newState)
{
    Console.Writeline($"{deviceName} : Device State {newState}");
}
这似乎适用于大多数USB设备,但在某些情况下,通过笔记本电脑上的外部耳机插孔连接设备不会触发OnDeviceStateChanged回调。我注意到的一个区别因素是,在这些情况下,当插入外部音频设备时,Windows“设备管理器”屏幕上没有可见的变化。不过,我注意到,只要插入音频设备,Windows音量设置就会发生变化。这让我相信,操作系统在某种程度上在连接的设备上表现出了差异


有没有办法检测到这种情况?

如果您没有收到任何事件,那么您可以尝试在计时器中调用PopulateAudioDevices来检测耳机。不能保证当耳机插入声卡(特别是如果它是外部声卡)时,windows会被告知。您依赖于提供此信息的声卡驱动程序,声卡驱动程序将决定是否将此作为单独的“设备”呈现给操作系统。