Vanara/PInvoke/Multimedia/MmSystem.cs

374 lines
16 KiB
C#

using System;
using System.Runtime.InteropServices;
namespace Vanara.PInvoke
{
/// <summary>Items from the WinMm.dll</summary>
public static partial class WinMm
{
/// <summary>Flags for playing the sound.</summary>
[PInvokeData("Mmsystem.h")]
[Flags]
public enum SND : uint
{
/// <summary>
/// The sound is played synchronously, and PlaySound returns after the sound event completes. This is the default behavior.
/// </summary>
SND_SYNC = 0x0000,
/// <summary>
/// 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.
/// </summary>
SND_ASYNC = 0x0001,
/// <summary>
/// No default sound event is used. If the sound cannot be found, PlaySound returns silently without playing the default sound.
/// </summary>
SND_NODEFAULT = 0x0002,
/// <summary>The pszSound parameter points to a sound loaded in memory. For more information, see Playing WAVE Resources.</summary>
SND_MEMORY = 0x0004,
/// <summary>
/// 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.
/// </summary>
SND_LOOP = 0x0008,
/// <summary>
/// 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.
/// </summary>
SND_NOSTOP = 0x0010,
/// <summary>
/// Not supported. Note Previous versions of the documentation implied incorrectly that this flag is supported. The function
/// ignores this flag.
/// </summary>
SND_NOWAIT = 0x00002000,
/// <summary>
/// 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.
/// </summary>
SND_ALIAS = 0x00010000,
/// <summary>The pszSound parameter is a predefined identifier for a system-event alias. See Remarks.</summary>
SND_ALIAS_ID = 0x00110000,
/// <summary>
/// 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.
/// </summary>
SND_FILENAME = 0x00020000,
/// <summary>
/// The pszSound parameter is a resource identifier; hmod must identify the instance that contains the resource. For more
/// information, see Playing WAVE Resources.
/// </summary>
SND_RESOURCE = 0x00040004,
/// <summary>Not supported.</summary>
SND_PURGE = 0x0040,
/// <summary>
/// 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.
/// </summary>
SND_APPLICATION = 0x0080,
/// <summary>
/// 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.
/// </summary>
SND_SENTRY = 0x00080000,
/// <summary>Treat this as a "ring" from a communications app - don't duck me</summary>
SND_RING = 0x00100000,
/// <summary>
/// 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.
/// </summary>
SND_SYSTEM = 0x00200000,
}
/// <summary>
/// The <c>PlaySound</c> 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.)
/// </summary>
/// <param name="pszSound">
/// <para>
/// A string that specifies the sound to play. The maximum length, including the null terminator, is 256 characters. If this
/// parameter is <c>NULL</c>, any currently playing waveform sound is stopped.
/// </para>
/// <para>
/// Three flags in fdwSound ( <c>SND_ALIAS</c>, <c>SND_FILENAME</c>, and <c>SND_RESOURCE</c>) 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,
/// <c>PlaySound</c> 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.
/// </para>
/// </param>
/// <param name="hmod">
/// Handle to the executable file that contains the resource to be loaded. This parameter must be <c>NULL</c> unless
/// <c>SND_RESOURCE</c> is specified in fdwSound.
/// </param>
/// <param name="fdwSound">
/// <para>Flags for playing the sound. The following values are defined.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>SND_APPLICATION</term>
/// <term>
/// 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.
/// </term>
/// </item>
/// <item>
/// <term>SND_ALIAS</term>
/// <term>
/// 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.
/// </term>
/// </item>
/// <item>
/// <term>SND_ALIAS_ID</term>
/// <term>The pszSound parameter is a predefined identifier for a system-event alias. See Remarks.</term>
/// </item>
/// <item>
/// <term>SND_ASYNC</term>
/// <term>
/// 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.
/// </term>
/// </item>
/// <item>
/// <term>SND_FILENAME</term>
/// <term>
/// 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.
/// </term>
/// </item>
/// <item>
/// <term>SND_LOOP</term>
/// <term>
/// 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.
/// </term>
/// </item>
/// <item>
/// <term>SND_MEMORY</term>
/// <term>The pszSound parameter points to a sound loaded in memory. For more information, see Playing WAVE Resources.</term>
/// </item>
/// <item>
/// <term>SND_NODEFAULT</term>
/// <term>No default sound event is used. If the sound cannot be found, PlaySound returns silently without playing the default sound.</term>
/// </item>
/// <item>
/// <term>SND_NOSTOP</term>
/// <term>
/// 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.
/// </term>
/// </item>
/// <item>
/// <term>SND_NOWAIT</term>
/// <term>
/// Not supported. Note Previous versions of the documentation implied incorrectly that this flag is supported. The function ignores
/// this flag.
/// </term>
/// </item>
/// <item>
/// <term>SND_PURGE</term>
/// <term>Not supported.</term>
/// </item>
/// <item>
/// <term>SND_RESOURCE</term>
/// <term>
/// The pszSound parameter is a resource identifier; hmod must identify the instance that contains the resource. For more
/// information, see Playing WAVE Resources.
/// </term>
/// </item>
/// <item>
/// <term>SND_SENTRY</term>
/// <term>
/// 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.
/// </term>
/// </item>
/// <item>
/// <term>SND_SYNC</term>
/// <term>The sound is played synchronously, and PlaySound returns after the sound event completes. This is the default behavior.</term>
/// </item>
/// <item>
/// <term>SND_SYSTEM</term>
/// <term>
/// 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.
/// </term>
/// </item>
/// </list>
/// </param>
/// <returns>Returns <c>TRUE</c> if successful or <c>FALSE</c> otherwise.</returns>
/// <remarks>
/// <para>
/// The sound specified by pszSound must fit into available physical memory and be playable by an installed waveform-audio device driver.
/// </para>
/// <para>
/// <c>PlaySound</c> 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 <c>SND_NODEFAULT</c> flag is not specified, <c>PlaySound</c> 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 <c>FALSE</c>.
/// </para>
/// <para>If the <c>SND_ALIAS_ID</c> flag is specified in fdwSound, the pszSound parameter must be one of the following values.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Description</term>
/// </listheader>
/// <item>
/// <term>SND_ALIAS_SYSTEMASTERISK</term>
/// <term>"SystemAsterisk" event.</term>
/// </item>
/// <item>
/// <term>SND_ALIAS_SYSTEMDEFAULT</term>
/// <term>"SystemDefault" event.</term>
/// </item>
/// <item>
/// <term>SND_ALIAS_SYSTEMEXCLAMATION</term>
/// <term>"SystemExclamation" event.</term>
/// </item>
/// <item>
/// <term>SND_ALIAS_SYSTEMEXIT</term>
/// <term>"SystemExit" event.</term>
/// </item>
/// <item>
/// <term>SND_ALIAS_SYSTEMHAND</term>
/// <term>"SystemHand" event.</term>
/// </item>
/// <item>
/// <term>SND_ALIAS_SYSTEMQUESTION</term>
/// <term>"SystemQuestion" event.</term>
/// </item>
/// <item>
/// <term>SND_ALIAS_SYSTEMSTART</term>
/// <term>"SystemStart" event.</term>
/// </item>
/// <item>
/// <term>SND_ALIAS_SYSTEMWELCOME</term>
/// <term>"SystemWelcome" event.</term>
/// </item>
/// </list>
/// <para>
/// The <c>SND_ASYNC</c> flag causes <c>PlaySound</c> to return immediately without waiting for the sound to finish playing. If you
/// combine the <c>SND_MEMORY</c> and <c>SND_ASYNC</c> flags, the memory buffer that contains the sound must remain valid until the
/// sound has completed playing.
/// </para>
/// </remarks>
// 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);
/// <summary>
/// The <c>sndPlaySound</c> 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 <c>PlaySound</c> function; <c>sndPlaySound</c> is being
/// maintained for backward compatibility.
/// </summary>
/// <param name="lpszSound">
/// 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 <c>NULL</c>, any currently playing sound is stopped.
/// </param>
/// <param name="fuSound">
/// <para>Flags for playing the sound. The following values are defined.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>SND_ASYNC</term>
/// <term>
/// 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.
/// </term>
/// </item>
/// <item>
/// <term>SND_LOOP</term>
/// <term>
/// 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.
/// </term>
/// </item>
/// <item>
/// <term>SND_MEMORY</term>
/// <term>
/// The parameter specified by lpszSound points to an image of a waveform sound in memory. The data passed must be trusted by the application.
/// </term>
/// </item>
/// <item>
/// <term>SND_NODEFAULT</term>
/// <term>If the sound cannot be found, the function returns silently without playing the default sound.</term>
/// </item>
/// <item>
/// <term>SND_NOSTOP</term>
/// <term>
/// If a sound is currently playing in the same process, the function immediately returns FALSE, without playing the requested sound.
/// </term>
/// </item>
/// <item>
/// <term>SND_SENTRY</term>
/// <term>
/// 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.
/// </term>
/// </item>
/// <item>
/// <term>SND_SYNC</term>
/// <term>The sound is played synchronously and the function does not return until the sound ends.</term>
/// </item>
/// <item>
/// <term>SND_SYSTEM</term>
/// <term>
/// 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.
/// </term>
/// </item>
/// </list>
/// </param>
/// <returns>Returns <c>TRUE</c> if successful or <c>FALSE</c> otherwise.</returns>
/// <remarks>
/// <para>
/// If the specified sound cannot be found, <c>sndPlaySound</c> 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 <c>FALSE</c>.
/// </para>
/// <para>
/// The specified sound must fit in available physical memory and be playable by an installed waveform-audio device driver. If
/// <c>sndPlaySound</c> does not find the sound in the current directory, the function searches for it using the standard
/// directory-search order.
/// </para>
/// </remarks>
// 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);
}
}