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);
}
}