2011-03-04 35 views
10

我有一个WinForms应用程序。此应用程序有一个“首选项”部分,用户可以选择在显示警报时播放哪些声音。从Windows中选择声音并播放它

是否有可能有一个组合框,用户可以从存储声音的窗口,比如“关键停”,“关键嘟”等选择。这些可在“控制面板”>>“声音和警报”部分找到。

是否有可能有播放按钮来测试声音?

+0

集声音是可扩展的,也许你注意到Visual Studio的构建声音?询问superuser.com他们存储在注册表中的位置。尽量避免重新设计Windows的标准部分。 – 2011-03-04 13:03:37

回答

10

试试这个:

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(); 
    } 
11

你不需要任何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"); 
8

当然!所有你要找的声音都可以通过System.Media.SystemSounds class,在那里他们被暴露为public properties对应于触发声音的事件类型。

此外,SystemSound class的对象提供Play method,您可以调用它来异步播放该声音。

因此,例如,打“临界停止”的声音,您只需编写以下代码:

System.Media.SystemSounds.Hand.Play();