|
|
/*==========================================================================
* * mmsysp.h -- Internal include file for Multimedia API's * * Version 4.00 * * Copyright (C) 1992-1998 Microsoft Corporation. All Rights Reserved. * *-------------------------------------------------------------------------- * * Define: Prevent inclusion of: * -------------- -------------------------------------------------------- * MMNODRV Installable driver support * MMNOSOUND Sound support * MMNOWAVE Waveform support * MMNOMIDI MIDI support * MMNOAUX Auxiliary audio support * MMNOMIXER Mixer support * MMNOTIMER Timer support * MMNOJOY Joystick support * MMNOMCI MCI support * MMNOMMIO Multimedia file I/O support * MMNOMMSYSTEM General MMSYSTEM functions * *========================================================================== */ #ifndef _INC_MMSYSP
#define _INC_MMSYSP
#ifdef _WIN32
#include <pshpack1.h>
#else
#ifndef RC_INVOKED
#pragma pack(1)
#endif
#endif
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */ #endif /* __cplusplus */
#ifdef _WIN32
#ifndef _WINMM_
#define WINMMAPI DECLSPEC_IMPORT
#else
#define WINMMAPI
#endif
#define _loadds
#define _huge
#endif
#ifdef BUILDDLL
#undef WINAPI
#define WINAPI _loadds FAR PASCAL
#undef CALLBACK
#define CALLBACK _loadds FAR PASCAL
#endif /* ifdef BUILDDLL */
/* Multimedia messages */ #define WM_MM_RESERVED_FIRST 0x03A0
#define WM_MM_RESERVED_LAST 0x03DF
/* 0x3BA is open */ #define MM_MCISYSTEM_STRING 0x3CA
#if(WINVER < 0x0400)
#define MM_MOM_POSITIONCB 0x3CA /* Callback for MEVT_POSITIONCB */
#ifndef MM_MCISIGNAL
#define MM_MCISIGNAL 0x3CB
#endif
#define MM_MIM_MOREDATA 0x3CC /* MIM_DONE w/ pending events */
/* 0x3CF is open */
#endif /* WINVER < 0x0400 */
/* 3D8 - 3DF are reserved for Haiku */
#ifdef _WIN32
#define WINMMDEVICECHANGEMSGSTRINGA "winmm_devicechange"
#define WINMMDEVICECHANGEMSGSTRINGW L"winmm_devicechange"
#ifdef UNICODE
#define WINMMDEVICECHANGEMSGSTRING WINMMDEVICECHANGEMSGSTRINGW
#else
#define WINMMDEVICECHANGEMSGSTRING WINMMDEVICECHANGEMSGSTRINGA
#endif
#else
#define WINMMDEVICECHANGEMSGSTRING "winmm_devicechange"
#endif
#ifndef MMNODRV
#endif /* ifndef MMNODRV */
#define CALLBACK_THUNK 0x00040000l /* dwCallback is a Ring0 Thread Handle */
#define CALLBACK_EVENT16 0x00060000l /* dwCallback is an EVENT under Win16*/
#ifdef BUILDDLL
typedef void (FAR PASCAL DRVCALLBACK)(HDRVR hdrvr, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2); #else /* ifdef BUILDDLL */
#endif /* ifdef BUILDDLL */
#ifndef MMNOMMSYSTEM
WINMMAPI UINT WINAPI mmsystemGetVersion(void); void FAR CDECL _loadds OutputDebugStrF(LPCSTR pszFormat, ...); void WINAPI winmmUntileBuffer(DWORD dwTilingInfo); DWORD WINAPI winmmTileBuffer(DWORD dwFlatMemory, DWORD dwLength); BOOL WINAPI mmShowMMCPLPropertySheet(HWND hWnd, LPSTR szPropSheetID, LPSTR szTabName, LPSTR szCaption); #endif /* ifndef MMNOMMSYSTEM */
#ifndef MMNOSOUND
#if(WINVER < 0x0400)
#define SND_PURGE 0x0040 /* purge non-static events for task */
#define SND_APPLICATION 0x0080 /* look for application specific association */
#endif /* WINVER < 0x0400 */
#define SND_LOPRIORITY 0x10000000L /* low priority sound */
#define SND_EVENTTIME 0x20000000L /* dangerous event time */
#define SND_VALIDFLAGS 0x001720DF // Set of valid flag bits. Anything outside
// this range will raise an error
#define SND_SNDPLAYSOUNDF_VALID 0x20FF
#define SND_PLAYSOUNDF_VALID 0x301720DFL
#endif /* ifndef MMNOSOUND */
#ifndef MMNOWAVE
#if(WINVER < 0x0400)
#define WAVE_MAPPED 0x0004
#define WAVE_FORMAT_DIRECT 0x0008
#define WAVE_FORMAT_DIRECT_QUERY (WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT)
#endif /* WINVER < 0x0400 */
#ifndef _WIN32
#define WAVE_SHARED 0x8000
#endif
#define WAVE_VALID 0x800F
#define WHDR_MAPPED 0x00001000 /* thunked header */
#define WHDR_VALID 0x0000101F /* valid flags */
#endif /* ifndef MMNOWAVE */
#ifndef MMNOMIDI
#if(WINVER < 0x0400)
#define MIM_MOREDATA MM_MIM_MOREDATA
#define MOM_POSITIONCB MM_MOM_POSITIONCB
#endif /* WINVER < 0x0400 */
#if(WINVER < 0x0400)
/* flags for dwFlags parm of midiInOpen() */ #define MIDI_IO_STATUS 0x00000020L
#endif /* WINVER < 0x0400 */
#define MIDI_IO_CONTROL 0x00000008L
#define MIDI_IO_INPUT 0x00000010L /*future*/
#define MIDI_IO_OWNED 0x00004000L
#define MIDI_IO_SHARED 0x00008000L
#define MIDI_I_VALID 0xC027
#define MIDI_O_VALID 0xC00E
#define MIDI_CACHE_VALID (MIDI_CACHE_ALL | MIDI_CACHE_BESTFIT | MIDI_CACHE_QUERY | MIDI_UNCACHE)
#if(WINVER < 0x0400)
#define MIDICAPS_STREAM 0x0008 /* driver supports midiStreamOut directly */
#endif /* WINVER < 0x0400 */
/* 3.1 style MIDIHDR for parameter validation */ typedef struct midihdr31_tag { LPSTR lpData; /* pointer to locked data block */ DWORD dwBufferLength; /* length of data in data block */ DWORD dwBytesRecorded; /* used for input only */ DWORD_PTR dwUser; /* for client's use */ DWORD dwFlags; /* assorted flags (see defines) */ struct midihdr_tag far *lpNext; /* reserved for driver */ DWORD_PTR reserved; /* reserved for driver */ } MIDIHDR31, *PMIDIHDR31, NEAR *NPMIDIHDR31, FAR *LPMIDIHDR31; #if(WINVER < 0x0400)
typedef struct midievent_tag { DWORD dwDeltaTime; /* Ticks since last event */ DWORD dwStreamID; /* Reserved; must be zero */ DWORD dwEvent; /* Event type and parameters */ DWORD dwParms[1]; /* Parameters if this is a long event */ } MIDIEVENT;
typedef struct midistrmbuffver_tag { DWORD dwVersion; /* Stream buffer format version */ DWORD dwMid; /* Manufacturer ID as defined in MMREG.H */ DWORD dwOEMVersion; /* Manufacturer version for custom ext */ } MIDISTRMBUFFVER; #endif /* WINVER < 0x0400 */
#define MHDR_SENDING 0x00000020
#define MHDR_MAPPED 0x00001000 /* thunked header */
#define MHDR_SHADOWHDR 0x00002000 /* MIDIHDR is 16-bit shadow */
#define MHDR_VALID 0x0000302F /* valid flags */
/*#define MHDR_VALID 0xFFFF000F /* valid flags */
#define MHDR_SAVE 0x00003000 /* Save these flags */
/* past driver calls */ #if(WINVER < 0x0400)
/* */ /* Type codes which go in the high byte of the event DWORD of a stream buffer */ /* */ /* Type codes 00-7F contain parameters within the low 24 bits */ /* Type codes 80-FF contain a length of their parameter in the low 24 */ /* bits, followed by their parameter data in the buffer. The event */ /* DWORD contains the exact byte length; the parm data itself must be */ /* padded to be an even multiple of 4 bytes long. */ /* */
#define MEVT_F_SHORT 0x00000000L
#define MEVT_F_LONG 0x80000000L
#define MEVT_F_CALLBACK 0x40000000L
#define MEVT_EVENTTYPE(x) ((BYTE)(((x)>>24)&0xFF))
#define MEVT_EVENTPARM(x) ((DWORD)((x)&0x00FFFFFFL))
#define MEVT_SHORTMSG ((BYTE)0x00) /* parm = shortmsg for midiOutShortMsg */
#define MEVT_TEMPO ((BYTE)0x01) /* parm = new tempo in microsec/qn */
#define MEVT_NOP ((BYTE)0x02) /* parm = unused; does nothing */
/* 0x04-0x7F reserved */
#define MEVT_LONGMSG ((BYTE)0x80) /* parm = bytes to send verbatim */
#define MEVT_COMMENT ((BYTE)0x82) /* parm = comment data */
#define MEVT_VERSION ((BYTE)0x84) /* parm = MIDISTRMBUFFVER struct */
/* 0x81-0xFF reserved */
#define MIDISTRM_ERROR (-2)
/* */ /* Structures and defines for midiStreamProperty */ /* */ #define MIDIPROP_SET 0x80000000L
#define MIDIPROP_GET 0x40000000L
/* These are intentionally both non-zero so the app cannot accidentally */ /* leave the operation off and happen to appear to work due to default */ /* action. */
#define MIDIPROP_TIMEDIV 0x00000001L
#define MIDIPROP_TEMPO 0x00000002L
typedef struct midiproptimediv_tag { DWORD cbStruct; DWORD dwTimeDiv; } MIDIPROPTIMEDIV, FAR *LPMIDIPROPTIMEDIV;
typedef struct midiproptempo_tag { DWORD cbStruct; DWORD dwTempo; } MIDIPROPTEMPO, FAR *LPMIDIPROPTEMPO;
#endif /* WINVER < 0x0400 */
#define MIDIPROP_PROPVAL 0x3FFFFFFFL
#if(WINVER < 0x0400)
WINMMAPI MMRESULT WINAPI midiStreamOpen( OUT LPHMIDISTRM phms, IN LPUINT puDeviceID, IN DWORD cMidi, IN DWORD_PTR dwCallback, IN DWORD_PTR dwInstance, IN DWORD fdwOpen); WINMMAPI MMRESULT WINAPI midiStreamClose( IN HMIDISTRM hms);
WINMMAPI MMRESULT WINAPI midiStreamProperty( IN HMIDISTRM hms, OUT LPBYTE lppropdata, IN DWORD dwProperty); WINMMAPI MMRESULT WINAPI midiStreamPosition( IN HMIDISTRM hms, OUT LPMMTIME lpmmt, IN UINT cbmmt);
WINMMAPI MMRESULT WINAPI midiStreamOut( IN HMIDISTRM hms, IN LPMIDIHDR pmh, IN UINT cbmh); WINMMAPI MMRESULT WINAPI midiStreamPause( IN HMIDISTRM hms); WINMMAPI MMRESULT WINAPI midiStreamRestart( IN HMIDISTRM hms); WINMMAPI MMRESULT WINAPI midiStreamStop( IN HMIDISTRM hms);
#ifdef _WIN32
WINMMAPI MMRESULT WINAPI midiConnect( IN HMIDI hmi, IN HMIDIOUT hmo, IN LPVOID pReserved); WINMMAPI MMRESULT WINAPI midiDisconnect( IN HMIDI hmi, IN HMIDIOUT hmo, IN LPVOID pReserved); #endif
#endif /* WINVER < 0x0400 */
#endif /* ifndef MMNOMIDI */
#ifndef MMNOAUX
#endif /* ifndef MMNOAUX */
#ifndef MMNOMIXER
#define MIXER_OBJECTF_TYPEMASK 0xF0000000L
#define MIXERCAPS_SUPPORTF_xxx 0x00000000L
#define MIXER_OPENF_VALID (MIXER_OBJECTF_TYPEMASK | CALLBACK_TYPEMASK)
#define MIXER_GETLINEINFOF_VALID (MIXER_OBJECTF_TYPEMASK | MIXER_GETLINEINFOF_QUERYMASK)
#define MIXER_GETIDF_VALID (MIXER_OBJECTF_TYPEMASK)
#define MIXERCONTROL_CONTROLF_VALID 0x80000003L
#define MIXER_GETLINECONTROLSF_VALID (MIXER_OBJECTF_TYPEMASK | MIXER_GETLINECONTROLSF_QUERYMASK)
#define MIXER_GETCONTROLDETAILSF_VALID (MIXER_OBJECTF_TYPEMASK | MIXER_GETCONTROLDETAILSF_QUERYMASK)
#define MIXER_SETCONTROLDETAILSF_VALID (MIXER_OBJECTF_TYPEMASK | MIXER_SETCONTROLDETAILSF_QUERYMASK)
#endif /* ifndef MMNOMIXER */
#ifndef MMNOTIMER
#ifdef BUILDDLL
typedef void (FAR PASCAL TIMECALLBACK)(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2); #else /* ifdef BUILDDLL */
#endif /* ifdef BUILDDLL */
#define TIME_CALLBACK_TYPEMASK 0x00F0
#endif /* ifndef MMNOTIMER */
#ifndef MMNOJOY
#if(WINVER < 0x0400)
typedef struct joyinfoex_tag { DWORD dwSize; /* size of structure */ DWORD dwFlags; /* flags to indicate what to return */ DWORD dwXpos; /* x position */ DWORD dwYpos; /* y position */ DWORD dwZpos; /* z position */ DWORD dwRpos; /* rudder/4th axis position */ DWORD dwUpos; /* 5th axis position */ DWORD dwVpos; /* 6th axis position */ DWORD dwButtons; /* button states */ DWORD dwButtonNumber; /* current button number pressed */ DWORD dwPOV; /* point of view state */ DWORD dwReserved1; /* reserved for communication between winmm & driver */ DWORD dwReserved2; /* reserved for future expansion */ } JOYINFOEX, *PJOYINFOEX, NEAR *NPJOYINFOEX, FAR *LPJOYINFOEX; #endif /* WINVER < 0x0400 */
#if(WINVER < 0x0400)
WINMMAPI MMRESULT WINAPI joyGetPosEx( IN UINT uJoyID, OUT LPJOYINFOEX pji); #endif /* WINVER < 0x0400 */
UINT WINAPI joySetCalibration(UINT uJoyID, LPUINT puXbase, LPUINT puXdelta, LPUINT puYbase, LPUINT puYdelta, LPUINT puZbase, LPUINT puZdelta); #if (WINVER >= 0x0400)
WINMMAPI MMRESULT WINAPI joyConfigChanged( IN DWORD dwFlags ); #endif
#endif /* ifndef MMNOJOY */
#ifndef MMNOMMIO
#define MMIO_OPEN_VALID 0x0003FFFF /* valid flags for mmioOpen */
#define MMIO_FLUSH_VALID MMIO_EMPTYBUF /* valid flags for mmioFlush */
#define MMIO_ADVANCE_VALID (MMIO_WRITE | MMIO_READ) /* valid flags for mmioAdvance */
#define MMIO_FOURCC_VALID MMIO_TOUPPER /* valid flags for mmioStringToFOURCC */
#define MMIO_DESCEND_VALID (MMIO_FINDCHUNK | MMIO_FINDRIFF | MMIO_FINDLIST)
#define MMIO_CREATE_VALID (MMIO_CREATERIFF | MMIO_CREATELIST)
#define MMIO_WIN31_TASK 0x80000000
#define MMIO_VALIDPROC 0x10070000 /* valid for mmioInstallIOProc */
#endif /* ifndef MMNOMMIO */
#ifndef MMNOMCI
#define MCI_SOUND 0x0812
#define MCI_WIN32CLIENT 0x0857
/* flags for dwFlags parameter of MCI_SOUND command message */ #define MCI_SOUND_NAME 0x00000100L
/* parameter block for MCI_SOUND command message */ #ifdef _WIN32
typedef struct tagMCI_SOUND_PARMSA { DWORD_PTR dwCallback; LPCSTR lpstrSoundName; } MCI_SOUND_PARMSA, *PMCI_SOUND_PARMSA, *LPMCI_SOUND_PARMSA; typedef struct tagMCI_SOUND_PARMSW { DWORD_PTR dwCallback; LPCWSTR lpstrSoundName; } MCI_SOUND_PARMSW, *PMCI_SOUND_PARMSW, *LPMCI_SOUND_PARMSW; #ifdef UNICODE
typedef MCI_SOUND_PARMSW MCI_SOUND_PARMS; typedef PMCI_SOUND_PARMSW PMCI_SOUND_PARMS; typedef LPMCI_SOUND_PARMSW LPMCI_SOUND_PARMS; #else
typedef MCI_SOUND_PARMSA MCI_SOUND_PARMS; typedef PMCI_SOUND_PARMSA PMCI_SOUND_PARMS; typedef LPMCI_SOUND_PARMSA LPMCI_SOUND_PARMS; #endif // UNICODE
#else
typedef struct tagMCI_SOUND_PARMS { DWORD dwCallback; LPCSTR lpstrSoundName; } MCI_SOUND_PARMS; typedef MCI_SOUND_PARMS FAR * LPMCI_SOUND_PARMS; #endif
#endif /* ifndef MMNOMCI */
/****************************************************************************
audiosrv MME PNP definitions
****************************************************************************/ #define MMDEVICEINFO_REMOVED 0x00000001
#define PAD_POINTER(p) (PVOID)((((DWORD_PTR)(p))+7)&(~0x7))
typedef struct _MMDEVICEINTERFACEINFO { LONG cPnpEvents; DWORD fdwInfo; DWORD SetupPreferredAudioCount; WCHAR szName[1]; } MMDEVICEINTERFACEINFO, *PMMDEVICEINTERFACEINFO;
// Note: This structure MMNPNPINFO is used with a global file mapping, and
// it is also used by DirectSound.
//
// Don't modify unless absolutely necessary!!!
typedef struct _MMPNPINFO { DWORD cbSize; LONG cPnpEvents; LONG cPreferredDeviceChanges; LONG cDevInterfaces; HWND hwndNotify; /* MMDEVINTERFACEINFO DevInfo[0]; */ } MMPNPINFO, *PMMPNPINFO;
#ifdef _WIN32
#define MMGLOBALPNPINFONAMEA "Global\\mmGlobalPnpInfo"
#define MMGLOBALPNPINFONAMEW L"Global\\mmGlobalPnpInfo"
#ifdef UNICODE
#define MMGLOBALPNPINFONAME MMGLOBALPNPINFONAMEW
#else
#define MMGLOBALPNPINFONAME MMGLOBALPNPINFONAMEA
#endif
#else
#define MMGLOBALPNPINFONAME "Global\\mmGlobalPnpInfo"
#endif
/****************************************************************************
GFX support
A series of functions to support the GFX features of the control panel
****************************************************************************/
#define GFXTYPE_INVALID 0
#define GFXTYPE_RENDER 1
#define GFXTYPE_CAPTURE 2
#define GFXTYPE_RENDERCAPTURE 3
#define GFX_MAXORDER (0x1000 - 1)
typedef struct _DEVICEINTERFACELIST { LONG Count; PWSTR DeviceInterface[1]; } DEVICEINTERFACELIST, *PDEVICEINTERFACELIST;
WINMMAPI LONG WINAPI gfxCreateZoneFactoriesList ( OUT PDEVICEINTERFACELIST *ppDeviceInterfaceList );
WINMMAPI LONG WINAPI gfxCreateGfxFactoriesList ( IN PCWSTR ZoneFactoryDi, OUT PDEVICEINTERFACELIST *ppDeviceInterfaceList );
WINMMAPI LONG WINAPI gfxDestroyDeviceInterfaceList ( IN PDEVICEINTERFACELIST pDiList );
typedef LONG (CALLBACK* GFXENUMCALLBACK)(PVOID Context, DWORD Id, PCWSTR GfxFactoryDi, REFCLSID rclsid, ULONG Type, ULONG Order);
WINMMAPI LONG WINAPI gfxEnumerateGfxs ( IN PCWSTR pstrZoneDeviceInterface, IN GFXENUMCALLBACK pGfxEnumCallback, IN PVOID Context );
WINMMAPI LONG WINAPI gfxRemoveGfx ( IN DWORD Id );
WINMMAPI LONG WINAPI gfxAddGfx ( IN PCWSTR ZoneFactoryDi, IN PCWSTR GfxFactoryDi, IN ULONG Type, IN ULONG Order, OUT PDWORD pNewId );
WINMMAPI LONG WINAPI gfxModifyGfx ( IN DWORD Id, IN ULONG Order );
WINMMAPI LONG WINAPI gfxOpenGfx ( IN DWORD dwGfxId, OUT HANDLE *pFileHandle );
typedef struct _GFXREMOVEREQUEST { DWORD IdToRemove; LONG Error; } GFXREMOVEREQUEST, *PGFXREMOVEREQUEST;
typedef struct _GFXMODIFYREQUEST { DWORD IdToModify; ULONG NewOrder; LONG Error; } GFXMODIFYREQUEST, *PGFXMODIFYREQUEST;
typedef struct _GFXADDREQUEST { PWSTR ZoneFactoryDi; PWSTR GfxFactoryDi; ULONG Type; ULONG Order; DWORD NewId; LONG Error; } GFXADDREQUEST, *PGFXADDREQUEST;
WINMMAPI LONG WINAPI gfxBatchChange ( PGFXREMOVEREQUEST paGfxRemoveRequests, ULONG cGfxRemoveRequests, PGFXMODIFYREQUEST paGfxModifyRequests, ULONG cGfxModifyRequests, PGFXADDREQUEST paGfxAddRequests, ULONG cGfxAddRequests );
#ifdef __cplusplus
} /* End of extern "C" { */ #endif /* __cplusplus */
#ifdef _WIN32
#include <poppack.h>
#else
#ifndef RC_INVOKED
#pragma pack()
#endif
#endif
#endif /* _INC_MMSYSP */
|