C# 在Windows中检测笔记本电脑上的耳机
我目前正在使用一个Windows桌面应用程序,如果连接的音频设备发生任何更改,该应用程序将收到通知 我目前正在通过软件包以以下方式使用核心音频接口API: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
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会被告知。您依赖于提供此信息的声卡驱动程序,声卡驱动程序将决定是否将此作为单独的“设备”呈现给操作系统。