13

我有一个 WinForms 应用程序。这个应用程序有一个首选项部分,用户可以在其中选择在显示警报时播放哪些声音。

是否可以有一个组合框,用户可以从 Windows 存储的声音中进行选择,例如“紧急停止”、“紧急哔”等。这些位于“控制面板”>>“声音和警报”部分。

是否也可以有一个播放按钮来测试声音?

4

3 回答 3

15

您不需要任何 API 来播放系统声音,只需编写如下代码:

// Plays the sound associated with the Asterisk system event.
System.Media.SystemSounds.Asterisk.Play();

该类SystemSounds包含以下预定义的系统声音:

  • 星号
  • 感叹
  • 问题

所有其他声音都需要您从注册表中读取所需的声音并使用如下代码播放:

SoundPlayer simpleSound = new SoundPlayer(@"c:\Path\To\Your\Wave\File.wav");
于 2011-03-04T12:12:48.577 回答
13

试试这个:

    private void Form1_Load(object sender, EventArgs e)
    {

        var systemSounds = new[]
                              {
                                  System.Media.SystemSounds.Asterisk,
                                  System.Media.SystemSounds.Beep,
                                  System.Media.SystemSounds.Exclamation,
                                  System.Media.SystemSounds.Hand,
                                  System.Media.SystemSounds.Question
                              };

        comboBox1.DataSource = systemSounds;

        comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
    }

    void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        ((System.Media.SystemSound)comboBox1.SelectedItem).Play();
    }
于 2011-03-04T13:19:54.833 回答
8

当然!您正在寻找的所有声音都可以通过System.Media.SystemSoundsclass获得,它们在其中公开为与触发声音的事件类型相对应的公共属性。

此外,SystemSound该类的对象提供了一种Play方法,您可以调用该方法来异步播放该声音。

例如,要播放“Critical Stop”声音,您只需编写以下代码:

System.Media.SystemSounds.Hand.Play();
于 2011-03-04T12:13:35.450 回答