using System; using System.Runtime.InteropServices; namespace Vanara.PInvoke { /// Items from the WinMm.dll public static partial class WinMm { /// Flags for playing the sound. [PInvokeData("Mmsystem.h")] [Flags] public enum SND : uint { /// /// The sound is played synchronously, and PlaySound returns after the sound event completes. This is the default behavior. /// SND_SYNC = 0x0000, /// /// The sound is played asynchronously and PlaySound returns immediately after beginning the sound. To terminate an /// asynchronously played waveform sound, call PlaySound with pszSound set to NULL. /// SND_ASYNC = 0x0001, /// /// No default sound event is used. If the sound cannot be found, PlaySound returns silently without playing the default sound. /// SND_NODEFAULT = 0x0002, /// The pszSound parameter points to a sound loaded in memory. For more information, see Playing WAVE Resources. SND_MEMORY = 0x0004, /// /// The sound plays repeatedly until PlaySound is called again with the pszSound parameter set to NULL. If this flag is set, you /// must also set the SND_ASYNC flag. /// SND_LOOP = 0x0008, /// /// The specified sound event will yield to another sound event that is already playing in the same process. If a sound cannot /// be played because the resource needed to generate that sound is busy playing another sound, the function immediately returns /// FALSE without playing the requested sound. If this flag is not specified, PlaySound attempts to stop any sound that is /// currently playing in the same process. Sounds played in other processes are not affected. /// SND_NOSTOP = 0x0010, /// /// Not supported. Note Previous versions of the documentation implied incorrectly that this flag is supported. The function /// ignores this flag. /// SND_NOWAIT = 0x00002000, /// /// The pszSound parameter is a system-event alias in the registry or the WIN.INI file. Do not use with either SND_FILENAME or SND_RESOURCE. /// SND_ALIAS = 0x00010000, /// The pszSound parameter is a predefined identifier for a system-event alias. See Remarks. SND_ALIAS_ID = 0x00110000, /// /// The pszSound parameter is a file name. If the file cannot be found, the function plays the default sound unless the /// SND_NODEFAULT flag is set. /// SND_FILENAME = 0x00020000, /// /// The pszSound parameter is a resource identifier; hmod must identify the instance that contains the resource. For more /// information, see Playing WAVE Resources. /// SND_RESOURCE = 0x00040004, /// Not supported. SND_PURGE = 0x0040, /// /// The pszSound parameter is an application-specific alias in the registry. You can combine this flag with the SND_ALIAS or /// SND_ALIAS_ID flag to specify an application-defined sound alias. /// SND_APPLICATION = 0x0080, /// /// Note Requires Windows Vista or later. If this flag is set, the function triggers a SoundSentry event when the sound is /// played. SoundSentry is an accessibility feature that causes the computer to display a visual cue when a sound is played. If /// the user did not enable SoundSentry, the visual cue is not displayed. /// SND_SENTRY = 0x00080000, /// Treat this as a "ring" from a communications app - don't duck me SND_RING = 0x00100000, /// /// Note Requires Windows Vista or later. If this flag is set, the sound is assigned to the audio session for system /// notification sounds. The system volume-control program (SndVol) displays a volume slider that controls system notification /// sounds. Setting this flag puts the sound under the control of that volume slider If this flag is not set, the sound is /// assigned to the default audio session for the application's process. For more information, see the documentation for the /// Core Audio APIs. /// SND_SYSTEM = 0x00200000, } /// /// The PlaySound function plays a sound specified by the given file name, resource, or system event. (A system event may be /// associated with a sound in the registry or in the WIN.INI file.) /// /// /// /// A string that specifies the sound to play. The maximum length, including the null terminator, is 256 characters. If this /// parameter is NULL, any currently playing waveform sound is stopped. /// /// /// Three flags in fdwSound ( SND_ALIAS, SND_FILENAME, and SND_RESOURCE) determine whether the name is /// interpreted as an alias for a system event, a file name, or a resource identifier. If none of these flags are specified, /// PlaySound searches the registry or the WIN.INI file for an association with the specified sound name. If an association /// is found, the sound event is played. If no association is found in the registry, the name is interpreted as a file name. /// /// /// /// Handle to the executable file that contains the resource to be loaded. This parameter must be NULL unless /// SND_RESOURCE is specified in fdwSound. /// /// /// Flags for playing the sound. The following values are defined. /// /// /// Value /// Meaning /// /// /// SND_APPLICATION /// /// The pszSound parameter is an application-specific alias in the registry. You can combine this flag with the SND_ALIAS or /// SND_ALIAS_ID flag to specify an application-defined sound alias. /// /// /// /// SND_ALIAS /// /// The pszSound parameter is a system-event alias in the registry or the WIN.INI file. Do not use with either SND_FILENAME or SND_RESOURCE. /// /// /// /// SND_ALIAS_ID /// The pszSound parameter is a predefined identifier for a system-event alias. See Remarks. /// /// /// SND_ASYNC /// /// The sound is played asynchronously and PlaySound returns immediately after beginning the sound. To terminate an asynchronously /// played waveform sound, call PlaySound with pszSound set to NULL. /// /// /// /// SND_FILENAME /// /// The pszSound parameter is a file name. If the file cannot be found, the function plays the default sound unless the /// SND_NODEFAULT flag is set. /// /// /// /// SND_LOOP /// /// The sound plays repeatedly until PlaySound is called again with the pszSound parameter set to NULL. If this flag is set, you /// must also set the SND_ASYNC flag. /// /// /// /// SND_MEMORY /// The pszSound parameter points to a sound loaded in memory. For more information, see Playing WAVE Resources. /// /// /// SND_NODEFAULT /// No default sound event is used. If the sound cannot be found, PlaySound returns silently without playing the default sound. /// /// /// SND_NOSTOP /// /// The specified sound event will yield to another sound event that is already playing in the same process. If a sound cannot be /// played because the resource needed to generate that sound is busy playing another sound, the function immediately returns FALSE /// without playing the requested sound. If this flag is not specified, PlaySound attempts to stop any sound that is currently /// playing in the same process. Sounds played in other processes are not affected. /// /// /// /// SND_NOWAIT /// /// Not supported. Note Previous versions of the documentation implied incorrectly that this flag is supported. The function ignores /// this flag. /// /// /// /// SND_PURGE /// Not supported. /// /// /// SND_RESOURCE /// /// The pszSound parameter is a resource identifier; hmod must identify the instance that contains the resource. For more /// information, see Playing WAVE Resources. /// /// /// /// SND_SENTRY /// /// Note Requires Windows Vista or later. If this flag is set, the function triggers a SoundSentry event when the sound is played. /// SoundSentry is an accessibility feature that causes the computer to display a visual cue when a sound is played. If the user did /// not enable SoundSentry, the visual cue is not displayed. /// /// /// /// SND_SYNC /// The sound is played synchronously, and PlaySound returns after the sound event completes. This is the default behavior. /// /// /// SND_SYSTEM /// /// Note Requires Windows Vista or later. If this flag is set, the sound is assigned to the audio session for system notification /// sounds. The system volume-control program (SndVol) displays a volume slider that controls system notification sounds. Setting /// this flag puts the sound under the control of that volume slider If this flag is not set, the sound is assigned to the default /// audio session for the application's process. For more information, see the documentation for the Core Audio APIs. /// /// /// /// /// Returns TRUE if successful or FALSE otherwise. /// /// /// The sound specified by pszSound must fit into available physical memory and be playable by an installed waveform-audio device driver. /// /// /// PlaySound searches the following directories for sound files: the current directory; the Windows directory; the Windows /// system directory; directories listed in the PATH environment variable; and the list of directories mapped in a network. If the /// function cannot find the specified sound and the SND_NODEFAULT flag is not specified, PlaySound uses the default /// system event sound instead. If the function can find neither the system default entry nor the default sound, it makes no sound /// and returns FALSE. /// /// If the SND_ALIAS_ID flag is specified in fdwSound, the pszSound parameter must be one of the following values. /// /// /// Value /// Description /// /// /// SND_ALIAS_SYSTEMASTERISK /// "SystemAsterisk" event. /// /// /// SND_ALIAS_SYSTEMDEFAULT /// "SystemDefault" event. /// /// /// SND_ALIAS_SYSTEMEXCLAMATION /// "SystemExclamation" event. /// /// /// SND_ALIAS_SYSTEMEXIT /// "SystemExit" event. /// /// /// SND_ALIAS_SYSTEMHAND /// "SystemHand" event. /// /// /// SND_ALIAS_SYSTEMQUESTION /// "SystemQuestion" event. /// /// /// SND_ALIAS_SYSTEMSTART /// "SystemStart" event. /// /// /// SND_ALIAS_SYSTEMWELCOME /// "SystemWelcome" event. /// /// /// /// The SND_ASYNC flag causes PlaySound to return immediately without waiting for the sound to finish playing. If you /// combine the SND_MEMORY and SND_ASYNC flags, the memory buffer that contains the sound must remain valid until the /// sound has completed playing. /// /// // https://docs.microsoft.com/en-us/previous-versions//dd743680(v=vs.85) BOOL PlaySound( LPCTSTR pszSound, HMODULE hmod, DWORD // fdwSound ); [DllImport(Lib_Winmm, SetLastError = false, CharSet = CharSet.Auto)] [PInvokeData("Mmsystem.h")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool PlaySound([In, Optional, MarshalAs(UnmanagedType.LPTStr)] string pszSound, [In, Optional] HINSTANCE hmod, [In, Optional] SND fdwSound); /// /// The sndPlaySound function plays a waveform sound specified either by a file name or by an entry in the registry or the /// WIN.INI file. This function offers a subset of the functionality of the PlaySound function; sndPlaySound is being /// maintained for backward compatibility. /// /// /// A string that specifies the sound to play. This parameter can be either an entry in the registry or in WIN.INI that identifies a /// system sound, or it can be the name of a waveform-audio file. (If the function does not find the entry, the parameter is treated /// as a file name.) If this parameter is NULL, any currently playing sound is stopped. /// /// /// Flags for playing the sound. The following values are defined. /// /// /// Value /// Meaning /// /// /// SND_ASYNC /// /// The sound is played asynchronously and the function returns immediately after beginning the sound. To terminate an /// asynchronously played sound, call sndPlaySound with lpszSound set to NULL. /// /// /// /// SND_LOOP /// /// The sound plays repeatedly until sndPlaySound is called again with the lpszSound parameter set to NULL. You must also specify /// the SND_ASYNC flag to loop sounds. /// /// /// /// SND_MEMORY /// /// The parameter specified by lpszSound points to an image of a waveform sound in memory. The data passed must be trusted by the application. /// /// /// /// SND_NODEFAULT /// If the sound cannot be found, the function returns silently without playing the default sound. /// /// /// SND_NOSTOP /// /// If a sound is currently playing in the same process, the function immediately returns FALSE, without playing the requested sound. /// /// /// /// SND_SENTRY /// /// Note Requires Windows Vista or later. If this flag is set, the function triggers a SoundSentry event when the sound is played. /// For more information, see PlaySound. /// /// /// /// SND_SYNC /// The sound is played synchronously and the function does not return until the sound ends. /// /// /// SND_SYSTEM /// /// Note Requires Windows Vista or later. If this flag is set, the sound is assigned to the audio session for system notification /// sounds. For more information, see PlaySound. /// /// /// /// /// Returns TRUE if successful or FALSE otherwise. /// /// /// If the specified sound cannot be found, sndPlaySound plays the system default sound. If there is no system default entry /// in the registry or WIN.INI file, or if the default sound cannot be found, the function makes no sound and returns FALSE. /// /// /// The specified sound must fit in available physical memory and be playable by an installed waveform-audio device driver. If /// sndPlaySound does not find the sound in the current directory, the function searches for it using the standard /// directory-search order. /// /// // https://docs.microsoft.com/en-us/previous-versions/dd798676(v=vs.85) BOOL sndPlaySound( LPCTSTR lpszSound, UINT fuSound ); [DllImport(Lib_Winmm, SetLastError = false, CharSet = CharSet.Auto)] [PInvokeData("Mmsystem.h")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool sndPlaySound([In, Optional] string lpszSound, uint fuSound); } }