c# NAudio 关闭Win系统声音
需要的引用:NAudio.Wasapi
代码:
using NAudio.CoreAudioApi;
/// <summary>
/// 获取系统使用声音的应用程序
/// </summary>
/// <returns></returns>
public static List<AudioSessionControl> GetAudioApplications()
{
List<AudioSessionControl> AudioSessionControls = new List<AudioSessionControl>();
try
{
MMDeviceEnumerator deviceEnumerator = new MMDeviceEnumerator();
MMDevice device = deviceEnumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia);
AudioSessionManager sessionManager = device.AudioSessionManager;
int sessionCount = sessionManager.Sessions.Count;
for (int i = 0; i < sessionCount; i++)
{
AudioSessionControl session = sessionManager.Sessions[i];
AudioSessionControls.Add(sessionManager.Sessions[i]);
}
}
catch (Exception ex)
{
LogUtil.WriteLocalLog(ex);
}
return AudioSessionControls;
}
/// <summary>
/// 设置指定名称程序音量
/// </summary>
/// <param name="ContainsName"></param>
/// <param name="Volume"></param>
/// <param name="Mute"></param>
/// <returns></returns>
public static bool SetApplicationsvolume(string[] ContainsName, float Volume = 1f, bool Mute = false)
{
try
{
foreach (var item in ContainsName)
{
AudioSessionControl audiosessioncontrol = GetAudioApplications().Where(w => w.DisplayName.Contains(item))?.FirstOrDefault();
if (audiosessioncontrol != null)
{
audiosessioncontrol.SimpleAudioVolume.Volume = Volume;
audiosessioncontrol.SimpleAudioVolume.Mute = Mute;
}
}
}
catch (Exception ex)
{
LogUtil.WriteLocalLog(ex);
}
return false;
}
/// <summary>
///设置系统程序声音是否静音
///注:只是针对系统程序声音,并不是整个系统的声音
/// </summary>
public static void SetSystemSoundMute(bool Mute)
{
try
{
//AudioSrv.Dll为系统声音对应的DisplayName
SetApplicationsvolume(new string[] { "AudioSrv.Dll" }, Mute: Mute);
}
catch (Exception ex)
{
LogUtil.WriteLocalLog(ex);
}
}
直接调用SetSystemSoundMute 方法是设置系统声音静音,要修改其他指定程序声音可以通过GetAudioApplications获取程序集合,再通过SetApplicationsvolume设置静音或者音量。