如何播放Windows通知声音? (它没有在System.Media.SystemSounds中定义)

时间:2017-12-29 16:39:30

标签: c# windows audio

使用System.Media时,会有一些名为SystemSounds的东西,您可以轻松播放几个操作系统声音:

System.Media.SystemSounds.Asterisk.Play();
System.Media.SystemSounds.Beep.Play();
System.Media.SystemSounds.Exclamation.Play();
System.Media.SystemSounds.Hand.Play();
System.Media.SystemSounds.Question.Play();

不幸的是,只有这五个选项,在Windows 10中,其中三个是相同的,而其中一个甚至不玩任何东西。

我真正想要做的是播放声音面板中定义的通知声音(见此处):

(imgur: Notification sound in the Sound Panel)

有谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

找到解决方案。代码在这里:

using System.Media;
using Microsoft.Win32;

public void PlayNotificationSound()
{
    bool found = false;
    try
    {
        using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"AppEvents\Schemes\Apps\.Default\Notification.Default\.Current"))
        {
            if (key != null)
            {
                Object o = key.GetValue(null); // pass null to get (Default)
                if (o != null)
                {
                    SoundPlayer theSound = new SoundPlayer((String)o);
                    theSound.Play();
                    found = true;
                }
            }
        }
    }
    catch
    { }
    if (!found)
        SystemSounds.Beep.Play(); // consolation prize
}

您可以浏览注册表编辑器中的键以查看其他声音。此外,此示例已编码为适用于Windows 10,并且我不确定其他版本的Windows的注册表结构是什么,因此如果您需要&#I,您需要仔细检查用户正在使用的操作系统# 39;重新尝试为多个平台编码。