DOBON.NET

システムサウンドを再生する

ここでは、様々なシステムサウンドを鳴らす方法を紹介します。システムサウンドは、コントロールパネルの「サウンドとオーディオデバイスのプロパティ」の「サウンド」タブ「プログラムイベント」の「Windows」で確認、変更ができます。ここで紹介する方法で再生できるシステムサウンドは、「メッセージ(情報)」、「一般の警告音」、「メッセージ(警告)」、「システムエラー」、「メッセージ(問い合わせ)」ですが、PlaySound関数を使用した方法では、それ以外のサウンドを再生することもできます。

.NET Framework 2.0以降で、SystemSoundクラスを使用して再生する

SystemSoundsクラスに用意されているプロパティによりSystemSoundを取得して、Playメソッドでサウンドを鳴らすことができます。

SystemSoundsクラスのプロパティとそれが意味するシステムサウンドの種類は、以下のようなものです。

SystemSoundsクラスのプロパティシステムサウンドの意味
Asteriskメッセージ(情報)
Beep一般の警告音
Exclamationメッセージ(警告)
Handシステムエラー
Questionメッセージ(問い合わせ)

以下に例を示します。Playメソッドは非同期的に再生しますので、下の例をすべて実行させずに、個別に実行してください。

VB.NET
コードを隠すコードを選択
'メッセージ(情報)を鳴らす
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()
C#
コードを隠すコードを選択
//メッセージ(情報)を鳴らす
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();

.NET Framework 2.0以降のVB.NETで、My.Computer.Audio.PlaySystemSoundメソッドを使用して再生する

.NET Framework 2.0以降のVB.NETでは、My.Computer.Audio.PlaySystemSoundメソッドを使用することもできます。SystemSoundクラスを使った方法と根本的には全く同じです。

VB.NET
コードを隠すコードを選択
'メッセージ(情報)を鳴らす
My.Computer.Audio.PlaySystemSound(System.Media.SystemSounds.Asterisk)

'一般の警告音を鳴らす
My.Computer.Audio.PlaySystemSound(System.Media.SystemSounds.Beep)

'メッセージ(警告)を鳴らす
My.Computer.Audio.PlaySystemSound(System.Media.SystemSounds.Exclamation)

'システムエラーを鳴らす
My.Computer.Audio.PlaySystemSound(System.Media.SystemSounds.Hand)

'メッセージ(問い合わせ)を鳴らす
My.Computer.Audio.PlaySystemSound(System.Media.SystemSounds.Question)

Win32 APIのMessageBeep関数で再生する方法

.NET Framework 1.1以前であれば、Win32 APIのMessageBeep関数でシステムサウンドを再生します。SystemSoundクラスの内部ではMessageBeep関数が使われていますので、根本的には同じです。

VB.NET
コードを隠すコードを選択
Public Enum MessageBeepType
    SimpleBeep = -1
    MB_OK = &H0
    MB_ICONHAND = &H10
    MB_ICONQUESTION = &H20
    MB_ICONEXCLAMATION = &H30
    MB_ICONASTERISK = &H40
End Enum

<System.Runtime.InteropServices.DllImport("user32.dll")> _
Public Shared Function MessageBeep(ByVal uType As MessageBeepType) As Boolean
End Function

'Button1のClickイベントハンドラ
Private Sub Button1_Click(ByVal sender As Object, _
        ByVal e As EventArgs) Handles Button1.Click
    'メッセージ(情報)を鳴らす
    MessageBeep(MessageBeepType.MB_ICONASTERISK)

    ''一般の警告音を鳴らす
    'MessageBeep(MessageBeepType.MB_OK)

    ''メッセージ(警告)を鳴らす
    'MessageBeep(MessageBeepType.MB_ICONEXCLAMATION)

    ''システムエラーを鳴らす
    'MessageBeep(MessageBeepType.MB_ICONHAND)

    ''メッセージ(問い合わせ)を鳴らす
    'MessageBeep(MessageBeepType.MB_ICONQUESTION)
End Sub
C#
コードを隠すコードを選択
public enum MessageBeepType : int
{
    SimpleBeep = -1,
    MB_OK = 0x00,
    MB_ICONHAND = 0x10,
    MB_ICONQUESTION = 0x20,
    MB_ICONEXCLAMATION = 0x30,
    MB_ICONASTERISK = 0x40,
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool MessageBeep(MessageBeepType uType);

//Button1のClickイベントハンドラ
private void Button1_Click(object sender, EventArgs e)
{
    //メッセージ(情報)を鳴らす
    MessageBeep(MessageBeepType.MB_ICONASTERISK);

    ////一般の警告音を鳴らす
    //MessageBeep(MessageBeepType.MB_OK);

    ////メッセージ(警告)を鳴らす
    //MessageBeep(MessageBeepType.MB_ICONEXCLAMATION);

    ////システムエラーを鳴らす
    //MessageBeep(MessageBeepType.MB_ICONHAND);

    ////メッセージ(問い合わせ)を鳴らす
    //MessageBeep(MessageBeepType.MB_ICONQUESTION);
}

Win32 APIのPlaySound関数で再生する方法

Win32 APIのPlaySound関数でもシステムサウンドを再生できます。PlaySound関数の1番目のパラメータに、レジストリに記述されているシステムイベントのエイリアスを指定します。PlaySound関数については、こちらをご覧ください。

VB.NET
コードを隠すコードを選択
'サウンドを再生するWin32 APIの宣言
<Flags()> _
Public Enum PlaySoundFlags
    SND_SYNC = &H0
    SND_ASYNC = &H1
    SND_NODEFAULT = &H2
    SND_MEMORY = &H4
    SND_LOOP = &H8
    SND_NOSTOP = &H10
    SND_NOWAIT = &H2000
    SND_ALIAS = &H10000
    SND_ALIAS_ID = &H110000
    SND_FILENAME = &H20000
    SND_RESOURCE = &H40004
    SND_PURGE = &H40
    SND_APPLICATION = &H80
End Enum
<System.Runtime.InteropServices.DllImport("winmm.dll", _
    CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function PlaySound(ByVal pszSound As String, _
    ByVal hmod As IntPtr, ByVal fdwSound As PlaySoundFlags) As Boolean
End Function

'Button1のClickイベントハンドラ
Private Sub Button1_Click(ByVal sender As Object, _
        ByVal e As EventArgs) Handles Button1.Click
    'メッセージ(情報)音を鳴らす
    PlaySound("SystemAsterisk", IntPtr.Zero, _
        PlaySoundFlags.SND_ALIAS Or PlaySoundFlags.SND_NODEFAULT)

    '一般の警告音を鳴らす
    PlaySound(".Default", IntPtr.Zero, _
        PlaySoundFlags.SND_ALIAS Or PlaySoundFlags.SND_NODEFAULT)

    'メッセージ(警告)音を鳴らす
    PlaySound("SystemExclamation", IntPtr.Zero, _
        PlaySoundFlags.SND_ALIAS Or PlaySoundFlags.SND_NODEFAULT)

    'システムエラー音を鳴らす
    PlaySound("SystemHand", IntPtr.Zero, _
        PlaySoundFlags.SND_ALIAS Or PlaySoundFlags.SND_NODEFAULT)

    'メッセージ(問い合わせ)音を鳴らす
    PlaySound("SystemQuestion", IntPtr.Zero, _
        PlaySoundFlags.SND_ALIAS Or PlaySoundFlags.SND_NODEFAULT)

    'Windowsの起動音を鳴らす
    PlaySound("SystemStart", IntPtr.Zero, _
        PlaySoundFlags.SND_ALIAS Or PlaySoundFlags.SND_NODEFAULT)

    'Windowsの終了音を鳴らす
    PlaySound("SystemExit", IntPtr.Zero, _
        PlaySoundFlags.SND_ALIAS Or PlaySoundFlags.SND_NODEFAULT)

    'Windowsログオン音を鳴らす
    PlaySound("WindowsLogon", IntPtr.Zero, _
        PlaySoundFlags.SND_ALIAS Or PlaySoundFlags.SND_NODEFAULT)

    'Windowsログオフ音を鳴らす
    PlaySound("WindowsLogoff", IntPtr.Zero, _
        PlaySoundFlags.SND_ALIAS Or PlaySoundFlags.SND_NODEFAULT)
End Sub
C#
コードを隠すコードを選択
[Flags]
public enum PlaySoundFlags : int
{
    SND_SYNC = 0x0000,
    SND_ASYNC = 0x0001,
    SND_NODEFAULT = 0x0002,
    SND_MEMORY = 0x0004,
    SND_LOOP = 0x0008,
    SND_NOSTOP = 0x0010,
    SND_NOWAIT = 0x00002000,
    SND_ALIAS = 0x00010000,
    SND_ALIAS_ID = 0x00110000,
    SND_FILENAME = 0x00020000,
    SND_RESOURCE = 0x00040004,
    SND_PURGE = 0x0040,
    SND_APPLICATION = 0x0080
}
[System.Runtime.InteropServices.DllImport("winmm.dll",
    CharSet = System.Runtime.InteropServices.CharSet.Auto)]
private static extern bool PlaySound(
    string pszSound, IntPtr hmod, PlaySoundFlags fdwSound);

//Button1のClickイベントハンドラ
private void Button1_Click(object sender, EventArgs e)
{
    //メッセージ(情報)音を鳴らす
    PlaySound("SystemAsterisk", IntPtr.Zero,
        PlaySoundFlags.SND_ALIAS | PlaySoundFlags.SND_NODEFAULT);

    //一般の警告音を鳴らす
    PlaySound(".Default", IntPtr.Zero,
        PlaySoundFlags.SND_ALIAS | PlaySoundFlags.SND_NODEFAULT);

    //メッセージ(警告)音を鳴らす
    PlaySound("SystemExclamation", IntPtr.Zero,
        PlaySoundFlags.SND_ALIAS | PlaySoundFlags.SND_NODEFAULT);

    //システムエラー音を鳴らす
    PlaySound("SystemHand", IntPtr.Zero,
        PlaySoundFlags.SND_ALIAS | PlaySoundFlags.SND_NODEFAULT);

    //メッセージ(問い合わせ)音を鳴らす
    PlaySound("SystemQuestion", IntPtr.Zero,
        PlaySoundFlags.SND_ALIAS | PlaySoundFlags.SND_NODEFAULT);

    //Windowsの起動音を鳴らす
    PlaySound("SystemStart", IntPtr.Zero,
        PlaySoundFlags.SND_ALIAS | PlaySoundFlags.SND_NODEFAULT);

    //Windowsの終了音を鳴らす
    PlaySound("SystemExit", IntPtr.Zero,
        PlaySoundFlags.SND_ALIAS | PlaySoundFlags.SND_NODEFAULT);

    //Windowsログオン音を鳴らす
    PlaySound("WindowsLogon", IntPtr.Zero,
        PlaySoundFlags.SND_ALIAS | PlaySoundFlags.SND_NODEFAULT);

    //Windowsログオフ音を鳴らす
    PlaySound("WindowsLogoff", IntPtr.Zero,
        PlaySoundFlags.SND_ALIAS | PlaySoundFlags.SND_NODEFAULT);
}

以下に、私が調べた限りの、プログラムイベントの種類とそのエイリアスを表にまとめます。

プログラムイベントエイリアス
Windowsの起動SystemStart
Windowsの終了SystemExit
WindowsログオフWindowsLogoff
WindowsログオンWindowsLogon
システムエラーSystemHand
システム通知SystemNotification
ツールバーバインドの表示ShowBand
デバイスの切断DeviceDisconnect
デバイスの接続DeviceConnect
デバイスの接続の失敗DeviceFail
バッテリー切れアラームCriticalBatteryAlarm
バッテリー低下アラームLowBatteryAlarm
プログラムエラーAppGPFault
プログラムの起動Open
プログラムの終了Close
メッセージ(警告)SystemExclamation
メッセージ(情報)SystemAsterisk
メッセージ(問い合わせ)SystemQuestion
メニューコマンドMenuCommand
メニューポップアップMenuPopup
一般の警告音.Default
印刷完了PrintComplete
元に戻す(拡大)RestoreUp
元に戻す(縮小)RestoreDown
最小化Minimize
最大化Maximize
新着メールの通知MailBeep
選択CCSelect

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。
共有する

この記事への評価

この記事へのコメント

この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。