2009-03-29 7 views
4

C#で "New Mail"システムサウンドを再生するにはどうすればよいですか?これは「通知」音とも呼ばれます。 Win32ので.Netで "New Mail"システムサウンドを再生するにはどうすればよいですか?

、それはあなたが.NETのことをどのように行うのか

sndPlaySound('Notify', (SND_ALIAS or SND_ASYNC)); 

のようなものでしょうか?私はあなたが

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

を行うことができますことを知っているが、そこに5つの音の非常に限られたセットがあります - ユーザーは新しいメール音として設定されているものは何でも含めていません。

新しいメールを受信して​​そのファイルを再生したときに再生されている.wavファイルを確認できますが、ユーザーのサウンドスキームが変更されたときには更新されません。私は最終的にやった


:代わりに、システムサウンドを再生するの

、私はリソースとしてアプリケーションにwavファイルを組み込み、およびオプションはただのPInvokeにあるSystem.Media.SoundPlayer

答えて

5

一つでそれを果たしました直接sndSound APIに渡します。ここではその方法

public partial class NativeMethods { 

    /// Return Type: BOOL->int 
    ///pszSound: LPCWSTR->WCHAR* 
    ///fuSound: UINT->unsigned int 
    [System.Runtime.InteropServices.DllImportAttribute("winmm.dll", EntryPoint="sndPlaySoundW")] 
    [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)] 
public static extern bool sndPlaySoundW([System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)] string pszSound, uint fuSound) ; 

    /// SND_APPLICATION -> 0x0080 
    public const int SND_APPLICATION = 128; 

    /// SND_ALIAS_START -> 0 
    public const int SND_ALIAS_START = 0; 

    /// SND_RESOURCE -> 0x00040004L 
    public const int SND_RESOURCE = 262148; 

    /// SND_FILENAME -> 0x00020000L 
    public const int SND_FILENAME = 131072; 

    /// SND_ALIAS_ID -> 0x00110000L 
    public const int SND_ALIAS_ID = 1114112; 

    /// SND_NOWAIT -> 0x00002000L 
    public const int SND_NOWAIT = 8192; 

    /// SND_NOSTOP -> 0x0010 
    public const int SND_NOSTOP = 16; 

    /// SND_MEMORY -> 0x0004 
    public const int SND_MEMORY = 4; 

    /// SND_PURGE -> 0x0040 
    public const int SND_PURGE = 64; 

    /// SND_ASYNC -> 0x0001 
    public const int SND_ASYNC = 1; 

    /// SND_ALIAS -> 0x00010000L 
    public const int SND_ALIAS = 65536; 

    /// SND_SYNC -> 0x0000 
    public const int SND_SYNC = 0; 

    /// SND_LOOP -> 0x0008 
    public const int SND_LOOP = 8; 

    /// SND_NODEFAULT -> 0x0002 
    public const int SND_NODEFAULT = 2; 
} 
3

ためのPInvokeの定義は、実際に新しいメール音は「MailBeep」の別名ではなく、「通知」の別名です。

PlaySound(L "MailBeep"、NULL、SND_SYSTEM | SND_NODEFAULT | SND_ALIAS)を呼び出したいとします。

P/Invokeは確かにここに行く方法です。

Don't forget to specify SND_NODEFAULT or your app will make dings even if the user disables the new mail sound in the control panel

SND_SYSTEMはWindows Vistaの新機能で、サウンドは「ウィンドウズサウンド」として再生されます。これは、あなたが望む経験ならばあなた次第です。

+0

SND_SYSTEMの値は何ですか? – Pedro77

関連する問題