【问题标题】:How do I code my WinForms application play a system sound?如何编码我的 WinForms 应用程序播放系统声音?
【发布时间】:2014-07-01 20:21:35
【问题描述】:

对于 C++,有一个函数 PlaySound,可以用来,呃,播放声音。 C#有这样的东西吗?我有一个应用程序,我想在它启动时播放系统声音,以宣布它的启动。

必须有办法。我希望。

我想把它放在我的 Form_Load 事件的末尾:

private void Form1_Load(object sender, EventArgs e)
{
    /* 
       A bunch of configuration and initialization stuff
    */

    PlayBeepBoop();
}

private void PlayBeepBoop()
{
    PlaySystemSound("Beep");
}

【问题讨论】:

    标签: c# winforms audio windows-7


    【解决方案1】:

    你可以使用这个类来播放任何“.wav”格式的声音。例如,您可以在 "C:\Windows\Media" (Windows 7) 中找到 windows 声音。

    public class Wav
    {
        [DllImport("winmm.dll", CharSet = CharSet.Auto)]
        private static extern bool PlaySound(String lpszName, IntPtr hModule, Int32 dwFlags);
    
        public static bool Play(string wavFileName)
        {
            try
            {
                return PlaySound(wavFileName, IntPtr.Zero, 0);
            }
            catch
            {
                return false;
            }
        }
    }
    

    【讨论】:

    • 谢谢,那是 C++ 版本,但我不知道它可以硬塞到 C# 应用程序中,所以这也很有用。
    【解决方案2】:

    有一个 SystemSounds 类听起来像你可能想要的:

    SystemSounds.Beep.Play();
    

    它对应于您在 Windows 声音设置中设置为“默认哔”的任何“wav”文件。

    【讨论】:

      【解决方案3】:

      我知道播放系统声音的三种方式。

      最通用的是要打印的与语言无关的\a 字符,它会发出非常标准的哔声。

      Console.WriteLine("\a");
      



      第二种方法使您可以直接访问一些声音,例如“感叹”和“手”。它们位于SystemSounds 类中(来自Systems.Media 命名空间),用法非常简单。

      SystemSounds.Hand.Play();
      



      最后,最后一种方法使您可以访问所有其他 Windows 系统声音。您所要做的就是创建一个SoundPlayer,也位于Systems.Media 命名空间中,并使用它手动加载声音。所有系统声音都位于同一个地方,所以很容易做到。

      new System.Media.SoundPlayer(@"C:\Windows\Media\tada.wav").Play();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-12
        • 2023-02-25
        • 1970-01-01
        • 2012-09-07
        • 2021-02-04
        • 2014-12-22
        • 2019-05-30
        • 2017-10-08
        相关资源
        最近更新 更多