ここでは、様々なシステムサウンドを鳴らす方法を紹介します。システムサウンドは、コントロールパネルの「サウンドとオーディオデバイスのプロパティ」の「サウンド」タブ「プログラムイベント」の「Windows」で確認、変更ができます。ここで紹介する方法で再生できるシステムサウンドは、「メッセージ(情報)」、「一般の警告音」、「メッセージ(警告)」、「システムエラー」、「メッセージ(問い合わせ)」ですが、PlaySound関数を使用した方法では、それ以外のサウンドを再生することもできます。
SystemSoundsクラスに用意されているプロパティによりSystemSoundを取得して、Playメソッドでサウンドを鳴らすことができます。
SystemSoundsクラスのプロパティとそれが意味するシステムサウンドの種類は、以下のようなものです。
SystemSoundsクラスのプロパティ | システムサウンドの意味 |
---|---|
Asterisk | メッセージ(情報) |
Beep | 一般の警告音 |
Exclamation | メッセージ(警告) |
Hand | システムエラー |
Question | メッセージ(問い合わせ) |
以下に例を示します。Playメソッドは非同期的に再生しますので、下の例をすべて実行させずに、個別に実行してください。
'メッセージ(情報)を鳴らす 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()
//メッセージ(情報)を鳴らす 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メソッドを使用することもできます。SystemSoundクラスを使った方法と根本的には全く同じです。
'メッセージ(情報)を鳴らす 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)
.NET Framework 1.1以前であれば、Win32 APIのMessageBeep関数でシステムサウンドを再生します。SystemSoundクラスの内部ではMessageBeep関数が使われていますので、根本的には同じです。
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
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関数でもシステムサウンドを再生できます。PlaySound関数の1番目のパラメータに、レジストリに記述されているシステムイベントのエイリアスを指定します。PlaySound関数については、こちらをご覧ください。
'サウンドを再生する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
[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 |