gpt4 book ai didi

c# - 通过C#检测耳机是否插入

转载 作者:可可西里 更新时间:2023-11-01 08:18:43 25 4
gpt4 key购买 nike

没有通过C#检测耳机是否插入的例子。

我想应该是某个事件...

使用 WMI 有意义吗?

 ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\cimv2",
"SELECT * FROM Win32_SoundDevice");

foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_SoundDevice instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("StatusInfo: {0}", queryObj["StatusInfo"]);
}

有人愿意提供吗?

谢谢!

最佳答案

我不建议您自己使用 COM+ API。

看看 NAudio NuGet package :

Install-Package NAudio

您应该能够枚举音频设备及其插入/拔出状态,如下所示:

var enumerator = new NAudio.CoreAudioApi.MMDeviceEnumerator();

// Allows you to enumerate rendering devices in certain states
var endpoints = enumerator.EnumerateAudioEndPoints(
DataFlow.Render,
DeviceState.Unplugged | DeviceState.Active);
foreach (var endpoint in endpoints)
{
Console.WriteLine("{0} - {1}", endpoint.DeviceFriendlyName, endpoint.State);
}

// Aswell as hook to the actual event
enumerator.RegisterEndpointNotificationCallback(new NotificationClient());

其中NotificationClient实现如下:

class NotificationClient : NAudio.CoreAudioApi.Interfaces.IMMNotificationClient
{
void IMMNotificationClient.OnDeviceStateChanged(string deviceId, DeviceState newState)
{
Console.WriteLine("OnDeviceStateChanged\n Device Id -->{0} : Device State {1}", deviceId, newState);
}

void IMMNotificationClient.OnDeviceAdded(string pwstrDeviceId) { }
void IMMNotificationClient.OnDeviceRemoved(string deviceId) { }
void IMMNotificationClient.OnDefaultDeviceChanged(DataFlow flow, Role role, string defaultDeviceId) { }
void IMMNotificationClient.OnPropertyValueChanged(string pwstrDeviceId, PropertyKey key) { }
}

应该产生类似的结果:

enter image description here

我认为它在上面的屏幕截图中检测到两次插入/拔出的原因是因为在 Macbook 上他们使用一个插孔用于麦克风和耳机。

关于c# - 通过C#检测耳机是否插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33872895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com