MMSystem.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:171k
源码类别:

模拟服务器

开发平台:

C/C++

  1. } MIXERLINECONTROLS, *PMIXERLINECONTROLS, FAR *LPMIXERLINECONTROLS;
  2. #endif
  3. /* */
  4. /* */
  5. /* */
  6. #ifdef _WIN32
  7. WINMMAPI MMRESULT WINAPI mixerGetLineControlsA( IN HMIXEROBJ hmxobj, IN OUT LPMIXERLINECONTROLSA pmxlc, IN DWORD fdwControls);
  8. WINMMAPI MMRESULT WINAPI mixerGetLineControlsW( IN HMIXEROBJ hmxobj, IN OUT LPMIXERLINECONTROLSW pmxlc, IN DWORD fdwControls);
  9. #ifdef UNICODE
  10. #define mixerGetLineControls  mixerGetLineControlsW
  11. #else
  12. #define mixerGetLineControls  mixerGetLineControlsA
  13. #endif // !UNICODE
  14. #else
  15. MMRESULT WINAPI mixerGetLineControls(HMIXEROBJ hmxobj, LPMIXERLINECONTROLS pmxlc, DWORD fdwControls);
  16. #endif
  17. #define MIXER_GETLINECONTROLSF_ALL          0x00000000L
  18. #define MIXER_GETLINECONTROLSF_ONEBYID      0x00000001L
  19. #define MIXER_GETLINECONTROLSF_ONEBYTYPE    0x00000002L
  20. #define MIXER_GETLINECONTROLSF_QUERYMASK    0x0000000FL
  21. typedef struct tMIXERCONTROLDETAILS {
  22.     DWORD           cbStruct;       /* size in bytes of MIXERCONTROLDETAILS */
  23.     DWORD           dwControlID;    /* control id to get/set details on */
  24.     DWORD           cChannels;      /* number of channels in paDetails array */
  25.     union {
  26.         HWND        hwndOwner;      /* for MIXER_SETCONTROLDETAILSF_CUSTOM */
  27.         DWORD       cMultipleItems; /* if _MULTIPLE, the number of items per channel */
  28.     };
  29.     DWORD           cbDetails;      /* size of _one_ details_XX struct */
  30.     LPVOID          paDetails;      /* pointer to array of details_XX structs */
  31. } MIXERCONTROLDETAILS, *PMIXERCONTROLDETAILS, FAR *LPMIXERCONTROLDETAILS;
  32. /* */
  33. /*  MIXER_GETCONTROLDETAILSF_LISTTEXT */
  34. /* */
  35. /* */
  36. #ifdef _WIN32
  37. typedef struct tagMIXERCONTROLDETAILS_LISTTEXTA {
  38.     DWORD           dwParam1;
  39.     DWORD           dwParam2;
  40.     CHAR            szName[MIXER_LONG_NAME_CHARS];
  41. } MIXERCONTROLDETAILS_LISTTEXTA, *PMIXERCONTROLDETAILS_LISTTEXTA, *LPMIXERCONTROLDETAILS_LISTTEXTA;
  42. typedef struct tagMIXERCONTROLDETAILS_LISTTEXTW {
  43.     DWORD           dwParam1;
  44.     DWORD           dwParam2;
  45.     WCHAR           szName[MIXER_LONG_NAME_CHARS];
  46. } MIXERCONTROLDETAILS_LISTTEXTW, *PMIXERCONTROLDETAILS_LISTTEXTW, *LPMIXERCONTROLDETAILS_LISTTEXTW;
  47. #ifdef UNICODE
  48. typedef MIXERCONTROLDETAILS_LISTTEXTW MIXERCONTROLDETAILS_LISTTEXT;
  49. typedef PMIXERCONTROLDETAILS_LISTTEXTW PMIXERCONTROLDETAILS_LISTTEXT;
  50. typedef LPMIXERCONTROLDETAILS_LISTTEXTW LPMIXERCONTROLDETAILS_LISTTEXT;
  51. #else
  52. typedef MIXERCONTROLDETAILS_LISTTEXTA MIXERCONTROLDETAILS_LISTTEXT;
  53. typedef PMIXERCONTROLDETAILS_LISTTEXTA PMIXERCONTROLDETAILS_LISTTEXT;
  54. typedef LPMIXERCONTROLDETAILS_LISTTEXTA LPMIXERCONTROLDETAILS_LISTTEXT;
  55. #endif // UNICODE
  56. #else
  57. typedef struct tMIXERCONTROLDETAILS_LISTTEXT {
  58.     DWORD           dwParam1;
  59.     DWORD           dwParam2;
  60.     char            szName[MIXER_LONG_NAME_CHARS];
  61. } MIXERCONTROLDETAILS_LISTTEXT, *PMIXERCONTROLDETAILS_LISTTEXT, FAR *LPMIXERCONTROLDETAILS_LISTTEXT;
  62. #endif
  63. /* */
  64. /*  MIXER_GETCONTROLDETAILSF_VALUE */
  65. /* */
  66. /* */
  67. typedef struct tMIXERCONTROLDETAILS_BOOLEAN {
  68.     LONG            fValue;
  69. }       MIXERCONTROLDETAILS_BOOLEAN,
  70.       *PMIXERCONTROLDETAILS_BOOLEAN,
  71.  FAR *LPMIXERCONTROLDETAILS_BOOLEAN;
  72. typedef struct tMIXERCONTROLDETAILS_SIGNED {
  73.     LONG            lValue;
  74. }       MIXERCONTROLDETAILS_SIGNED,
  75.       *PMIXERCONTROLDETAILS_SIGNED,
  76.  FAR *LPMIXERCONTROLDETAILS_SIGNED;
  77. typedef struct tMIXERCONTROLDETAILS_UNSIGNED {
  78.     DWORD           dwValue;
  79. }       MIXERCONTROLDETAILS_UNSIGNED,
  80.       *PMIXERCONTROLDETAILS_UNSIGNED,
  81.  FAR *LPMIXERCONTROLDETAILS_UNSIGNED;
  82. #ifdef _WIN32
  83. WINMMAPI MMRESULT WINAPI mixerGetControlDetailsA( IN HMIXEROBJ hmxobj, IN OUT LPMIXERCONTROLDETAILS pmxcd, IN DWORD fdwDetails);
  84. WINMMAPI MMRESULT WINAPI mixerGetControlDetailsW( IN HMIXEROBJ hmxobj, IN OUT LPMIXERCONTROLDETAILS pmxcd, IN DWORD fdwDetails);
  85. #ifdef UNICODE
  86. #define mixerGetControlDetails  mixerGetControlDetailsW
  87. #else
  88. #define mixerGetControlDetails  mixerGetControlDetailsA
  89. #endif // !UNICODE
  90. #else
  91. MMRESULT WINAPI mixerGetControlDetails(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails);
  92. #endif
  93. #define MIXER_GETCONTROLDETAILSF_VALUE      0x00000000L
  94. #define MIXER_GETCONTROLDETAILSF_LISTTEXT   0x00000001L
  95. #define MIXER_GETCONTROLDETAILSF_QUERYMASK  0x0000000FL
  96. WINMMAPI MMRESULT WINAPI mixerSetControlDetails( IN HMIXEROBJ hmxobj, IN LPMIXERCONTROLDETAILS pmxcd, IN DWORD fdwDetails);
  97. #define MIXER_SETCONTROLDETAILSF_VALUE      0x00000000L
  98. #define MIXER_SETCONTROLDETAILSF_CUSTOM     0x00000001L
  99. #define MIXER_SETCONTROLDETAILSF_QUERYMASK  0x0000000FL
  100. #endif /* ifndef MMNOMIXER */
  101. #ifndef MMNOTIMER
  102. /****************************************************************************
  103.                             Timer support
  104. ****************************************************************************/
  105. /* timer error return values */
  106. #define TIMERR_NOERROR        (0)                  /* no error */
  107. #define TIMERR_NOCANDO        (TIMERR_BASE+1)      /* request not completed */
  108. #define TIMERR_STRUCT         (TIMERR_BASE+33)     /* time struct size */
  109. /* timer data types */
  110. typedef void (CALLBACK TIMECALLBACK)(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2);
  111. typedef TIMECALLBACK FAR *LPTIMECALLBACK;
  112. /* flags for fuEvent parameter of timeSetEvent() function */
  113. #define TIME_ONESHOT    0x0000   /* program timer for single event */
  114. #define TIME_PERIODIC   0x0001   /* program for continuous periodic event */
  115. #ifdef _WIN32
  116. #define TIME_CALLBACK_FUNCTION      0x0000  /* callback is function */
  117. #define TIME_CALLBACK_EVENT_SET     0x0010  /* callback is event - use SetEvent */
  118. #define TIME_CALLBACK_EVENT_PULSE   0x0020  /* callback is event - use PulseEvent */
  119. #endif
  120. #if WINVER >= 0x0501
  121. #define TIME_KILL_SYNCHRONOUS   0x0100  /* This flag prevents the event from occurring */
  122.                                         /* after the user calls timeKillEvent() to */
  123.                                         /* destroy it. */
  124. #endif // WINVER >= 0x0501
  125. /* timer device capabilities data structure */
  126. typedef struct timecaps_tag {
  127.     UINT    wPeriodMin;     /* minimum period supported  */
  128.     UINT    wPeriodMax;     /* maximum period supported  */
  129. } TIMECAPS, *PTIMECAPS, NEAR *NPTIMECAPS, FAR *LPTIMECAPS;
  130. /* timer function prototypes */
  131. WINMMAPI MMRESULT WINAPI timeGetSystemTime( OUT LPMMTIME pmmt, IN UINT cbmmt);
  132. WINMMAPI DWORD WINAPI timeGetTime(void);
  133. WINMMAPI MMRESULT WINAPI timeSetEvent( IN UINT uDelay, IN UINT uResolution,
  134.     IN LPTIMECALLBACK fptc, IN DWORD_PTR dwUser, IN UINT fuEvent);
  135. WINMMAPI MMRESULT WINAPI timeKillEvent( IN UINT uTimerID);
  136. WINMMAPI MMRESULT WINAPI timeGetDevCaps( OUT LPTIMECAPS ptc, IN UINT cbtc);
  137. WINMMAPI MMRESULT WINAPI timeBeginPeriod( IN UINT uPeriod);
  138. WINMMAPI MMRESULT WINAPI timeEndPeriod( IN UINT uPeriod);
  139. #endif  /* ifndef MMNOTIMER */
  140. #ifndef MMNOJOY
  141. /****************************************************************************
  142.                             Joystick support
  143. ****************************************************************************/
  144. /* joystick error return values */
  145. #define JOYERR_NOERROR        (0)                  /* no error */
  146. #define JOYERR_PARMS          (JOYERR_BASE+5)      /* bad parameters */
  147. #define JOYERR_NOCANDO        (JOYERR_BASE+6)      /* request not completed */
  148. #define JOYERR_UNPLUGGED      (JOYERR_BASE+7)      /* joystick is unplugged */
  149. /* constants used with JOYINFO and JOYINFOEX structures and MM_JOY* messages */
  150. #define JOY_BUTTON1         0x0001
  151. #define JOY_BUTTON2         0x0002
  152. #define JOY_BUTTON3         0x0004
  153. #define JOY_BUTTON4         0x0008
  154. #define JOY_BUTTON1CHG      0x0100
  155. #define JOY_BUTTON2CHG      0x0200
  156. #define JOY_BUTTON3CHG      0x0400
  157. #define JOY_BUTTON4CHG      0x0800
  158. /* constants used with JOYINFOEX */
  159. #define JOY_BUTTON5         0x00000010l
  160. #define JOY_BUTTON6         0x00000020l
  161. #define JOY_BUTTON7         0x00000040l
  162. #define JOY_BUTTON8         0x00000080l
  163. #define JOY_BUTTON9         0x00000100l
  164. #define JOY_BUTTON10        0x00000200l
  165. #define JOY_BUTTON11        0x00000400l
  166. #define JOY_BUTTON12        0x00000800l
  167. #define JOY_BUTTON13        0x00001000l
  168. #define JOY_BUTTON14        0x00002000l
  169. #define JOY_BUTTON15        0x00004000l
  170. #define JOY_BUTTON16        0x00008000l
  171. #define JOY_BUTTON17        0x00010000l
  172. #define JOY_BUTTON18        0x00020000l
  173. #define JOY_BUTTON19        0x00040000l
  174. #define JOY_BUTTON20        0x00080000l
  175. #define JOY_BUTTON21        0x00100000l
  176. #define JOY_BUTTON22        0x00200000l
  177. #define JOY_BUTTON23        0x00400000l
  178. #define JOY_BUTTON24        0x00800000l
  179. #define JOY_BUTTON25        0x01000000l
  180. #define JOY_BUTTON26        0x02000000l
  181. #define JOY_BUTTON27        0x04000000l
  182. #define JOY_BUTTON28        0x08000000l
  183. #define JOY_BUTTON29        0x10000000l
  184. #define JOY_BUTTON30        0x20000000l
  185. #define JOY_BUTTON31        0x40000000l
  186. #define JOY_BUTTON32        0x80000000l
  187. /* constants used with JOYINFOEX structure */
  188. #define JOY_POVCENTERED         (WORD) -1
  189. #define JOY_POVFORWARD          0
  190. #define JOY_POVRIGHT            9000
  191. #define JOY_POVBACKWARD         18000
  192. #define JOY_POVLEFT             27000
  193. #define JOY_RETURNX             0x00000001l
  194. #define JOY_RETURNY             0x00000002l
  195. #define JOY_RETURNZ             0x00000004l
  196. #define JOY_RETURNR             0x00000008l
  197. #define JOY_RETURNU             0x00000010l     /* axis 5 */
  198. #define JOY_RETURNV             0x00000020l     /* axis 6 */
  199. #define JOY_RETURNPOV           0x00000040l
  200. #define JOY_RETURNBUTTONS       0x00000080l
  201. #define JOY_RETURNRAWDATA       0x00000100l
  202. #define JOY_RETURNPOVCTS        0x00000200l
  203. #define JOY_RETURNCENTERED      0x00000400l
  204. #define JOY_USEDEADZONE         0x00000800l
  205. #define JOY_RETURNALL           (JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | 
  206.                                  JOY_RETURNR | JOY_RETURNU | JOY_RETURNV | 
  207.                                  JOY_RETURNPOV | JOY_RETURNBUTTONS)
  208. #define JOY_CAL_READALWAYS      0x00010000l
  209. #define JOY_CAL_READXYONLY      0x00020000l
  210. #define JOY_CAL_READ3           0x00040000l
  211. #define JOY_CAL_READ4           0x00080000l
  212. #define JOY_CAL_READXONLY       0x00100000l
  213. #define JOY_CAL_READYONLY       0x00200000l
  214. #define JOY_CAL_READ5           0x00400000l
  215. #define JOY_CAL_READ6           0x00800000l
  216. #define JOY_CAL_READZONLY       0x01000000l
  217. #define JOY_CAL_READRONLY       0x02000000l
  218. #define JOY_CAL_READUONLY       0x04000000l
  219. #define JOY_CAL_READVONLY       0x08000000l
  220. /* joystick ID constants */
  221. #define JOYSTICKID1         0
  222. #define JOYSTICKID2         1
  223. /* joystick driver capabilites */
  224. #define JOYCAPS_HASZ            0x0001
  225. #define JOYCAPS_HASR            0x0002
  226. #define JOYCAPS_HASU            0x0004
  227. #define JOYCAPS_HASV            0x0008
  228. #define JOYCAPS_HASPOV          0x0010
  229. #define JOYCAPS_POV4DIR         0x0020
  230. #define JOYCAPS_POVCTS          0x0040
  231. /* joystick device capabilities data structure */
  232. #ifdef _WIN32
  233. typedef struct tagJOYCAPSA {
  234.     WORD    wMid;                /* manufacturer ID */
  235.     WORD    wPid;                /* product ID */
  236.     CHAR    szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
  237.     UINT    wXmin;               /* minimum x position value */
  238.     UINT    wXmax;               /* maximum x position value */
  239.     UINT    wYmin;               /* minimum y position value */
  240.     UINT    wYmax;               /* maximum y position value */
  241.     UINT    wZmin;               /* minimum z position value */
  242.     UINT    wZmax;               /* maximum z position value */
  243.     UINT    wNumButtons;         /* number of buttons */
  244.     UINT    wPeriodMin;          /* minimum message period when captured */
  245.     UINT    wPeriodMax;          /* maximum message period when captured */
  246. #if (WINVER >= 0x0400)
  247.     UINT    wRmin;               /* minimum r position value */
  248.     UINT    wRmax;               /* maximum r position value */
  249.     UINT    wUmin;               /* minimum u (5th axis) position value */
  250.     UINT    wUmax;               /* maximum u (5th axis) position value */
  251.     UINT    wVmin;               /* minimum v (6th axis) position value */
  252.     UINT    wVmax;               /* maximum v (6th axis) position value */
  253.     UINT    wCaps;               /* joystick capabilites */
  254.     UINT    wMaxAxes;            /* maximum number of axes supported */
  255.     UINT    wNumAxes;            /* number of axes in use */
  256.     UINT    wMaxButtons;         /* maximum number of buttons supported */
  257.     CHAR    szRegKey[MAXPNAMELEN];/* registry key */
  258.     CHAR    szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; /* OEM VxD in use */
  259. #endif
  260. } JOYCAPSA, *PJOYCAPSA, *NPJOYCAPSA, *LPJOYCAPSA;
  261. typedef struct tagJOYCAPSW {
  262.     WORD    wMid;                /* manufacturer ID */
  263.     WORD    wPid;                /* product ID */
  264.     WCHAR   szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
  265.     UINT    wXmin;               /* minimum x position value */
  266.     UINT    wXmax;               /* maximum x position value */
  267.     UINT    wYmin;               /* minimum y position value */
  268.     UINT    wYmax;               /* maximum y position value */
  269.     UINT    wZmin;               /* minimum z position value */
  270.     UINT    wZmax;               /* maximum z position value */
  271.     UINT    wNumButtons;         /* number of buttons */
  272.     UINT    wPeriodMin;          /* minimum message period when captured */
  273.     UINT    wPeriodMax;          /* maximum message period when captured */
  274. #if (WINVER >= 0x0400)
  275.     UINT    wRmin;               /* minimum r position value */
  276.     UINT    wRmax;               /* maximum r position value */
  277.     UINT    wUmin;               /* minimum u (5th axis) position value */
  278.     UINT    wUmax;               /* maximum u (5th axis) position value */
  279.     UINT    wVmin;               /* minimum v (6th axis) position value */
  280.     UINT    wVmax;               /* maximum v (6th axis) position value */
  281.     UINT    wCaps;               /* joystick capabilites */
  282.     UINT    wMaxAxes;            /* maximum number of axes supported */
  283.     UINT    wNumAxes;            /* number of axes in use */
  284.     UINT    wMaxButtons;         /* maximum number of buttons supported */
  285.     WCHAR   szRegKey[MAXPNAMELEN];/* registry key */
  286.     WCHAR   szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; /* OEM VxD in use */
  287. #endif
  288. } JOYCAPSW, *PJOYCAPSW, *NPJOYCAPSW, *LPJOYCAPSW;
  289. #ifdef UNICODE
  290. typedef JOYCAPSW JOYCAPS;
  291. typedef PJOYCAPSW PJOYCAPS;
  292. typedef NPJOYCAPSW NPJOYCAPS;
  293. typedef LPJOYCAPSW LPJOYCAPS;
  294. #else
  295. typedef JOYCAPSA JOYCAPS;
  296. typedef PJOYCAPSA PJOYCAPS;
  297. typedef NPJOYCAPSA NPJOYCAPS;
  298. typedef LPJOYCAPSA LPJOYCAPS;
  299. #endif // UNICODE
  300. typedef struct tagJOYCAPS2A {
  301.     WORD    wMid;                /* manufacturer ID */
  302.     WORD    wPid;                /* product ID */
  303.     CHAR    szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
  304.     UINT    wXmin;               /* minimum x position value */
  305.     UINT    wXmax;               /* maximum x position value */
  306.     UINT    wYmin;               /* minimum y position value */
  307.     UINT    wYmax;               /* maximum y position value */
  308.     UINT    wZmin;               /* minimum z position value */
  309.     UINT    wZmax;               /* maximum z position value */
  310.     UINT    wNumButtons;         /* number of buttons */
  311.     UINT    wPeriodMin;          /* minimum message period when captured */
  312.     UINT    wPeriodMax;          /* maximum message period when captured */
  313.     UINT    wRmin;               /* minimum r position value */
  314.     UINT    wRmax;               /* maximum r position value */
  315.     UINT    wUmin;               /* minimum u (5th axis) position value */
  316.     UINT    wUmax;               /* maximum u (5th axis) position value */
  317.     UINT    wVmin;               /* minimum v (6th axis) position value */
  318.     UINT    wVmax;               /* maximum v (6th axis) position value */
  319.     UINT    wCaps;               /* joystick capabilites */
  320.     UINT    wMaxAxes;            /* maximum number of axes supported */
  321.     UINT    wNumAxes;            /* number of axes in use */
  322.     UINT    wMaxButtons;         /* maximum number of buttons supported */
  323.     CHAR    szRegKey[MAXPNAMELEN];/* registry key */
  324.     CHAR    szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; /* OEM VxD in use */
  325.     GUID    ManufacturerGuid;    /* for extensible MID mapping */
  326.     GUID    ProductGuid;         /* for extensible PID mapping */
  327.     GUID    NameGuid;            /* for name lookup in registry */
  328. } JOYCAPS2A, *PJOYCAPS2A, *NPJOYCAPS2A, *LPJOYCAPS2A;
  329. typedef struct tagJOYCAPS2W {
  330.     WORD    wMid;                /* manufacturer ID */
  331.     WORD    wPid;                /* product ID */
  332.     WCHAR   szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
  333.     UINT    wXmin;               /* minimum x position value */
  334.     UINT    wXmax;               /* maximum x position value */
  335.     UINT    wYmin;               /* minimum y position value */
  336.     UINT    wYmax;               /* maximum y position value */
  337.     UINT    wZmin;               /* minimum z position value */
  338.     UINT    wZmax;               /* maximum z position value */
  339.     UINT    wNumButtons;         /* number of buttons */
  340.     UINT    wPeriodMin;          /* minimum message period when captured */
  341.     UINT    wPeriodMax;          /* maximum message period when captured */
  342.     UINT    wRmin;               /* minimum r position value */
  343.     UINT    wRmax;               /* maximum r position value */
  344.     UINT    wUmin;               /* minimum u (5th axis) position value */
  345.     UINT    wUmax;               /* maximum u (5th axis) position value */
  346.     UINT    wVmin;               /* minimum v (6th axis) position value */
  347.     UINT    wVmax;               /* maximum v (6th axis) position value */
  348.     UINT    wCaps;               /* joystick capabilites */
  349.     UINT    wMaxAxes;            /* maximum number of axes supported */
  350.     UINT    wNumAxes;            /* number of axes in use */
  351.     UINT    wMaxButtons;         /* maximum number of buttons supported */
  352.     WCHAR   szRegKey[MAXPNAMELEN];/* registry key */
  353.     WCHAR   szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; /* OEM VxD in use */
  354.     GUID    ManufacturerGuid;    /* for extensible MID mapping */
  355.     GUID    ProductGuid;         /* for extensible PID mapping */
  356.     GUID    NameGuid;            /* for name lookup in registry */
  357. } JOYCAPS2W, *PJOYCAPS2W, *NPJOYCAPS2W, *LPJOYCAPS2W;
  358. #ifdef UNICODE
  359. typedef JOYCAPS2W JOYCAPS2;
  360. typedef PJOYCAPS2W PJOYCAPS2;
  361. typedef NPJOYCAPS2W NPJOYCAPS2;
  362. typedef LPJOYCAPS2W LPJOYCAPS2;
  363. #else
  364. typedef JOYCAPS2A JOYCAPS2;
  365. typedef PJOYCAPS2A PJOYCAPS2;
  366. typedef NPJOYCAPS2A NPJOYCAPS2;
  367. typedef LPJOYCAPS2A LPJOYCAPS2;
  368. #endif // UNICODE
  369. #else
  370. typedef struct joycaps_tag {
  371.     WORD wMid;                  /* manufacturer ID */
  372.     WORD wPid;                  /* product ID */
  373.     char szPname[MAXPNAMELEN];  /* product name (NULL terminated string) */
  374.     UINT wXmin;                 /* minimum x position value */
  375.     UINT wXmax;                 /* maximum x position value */
  376.     UINT wYmin;                 /* minimum y position value */
  377.     UINT wYmax;                 /* maximum y position value */
  378.     UINT wZmin;                 /* minimum z position value */
  379.     UINT wZmax;                 /* maximum z position value */
  380.     UINT wNumButtons;           /* number of buttons */
  381.     UINT wPeriodMin;            /* minimum message period when captured */
  382.     UINT wPeriodMax;            /* maximum message period when captured */
  383. #if (WINVER >= 0x0400)
  384.     UINT wRmin;                 /* minimum r position value */
  385.     UINT wRmax;                 /* maximum r position value */
  386.     UINT wUmin;                 /* minimum u (5th axis) position value */
  387.     UINT wUmax;                 /* maximum u (5th axis) position value */
  388.     UINT wVmin;                 /* minimum v (6th axis) position value */
  389.     UINT wVmax;                 /* maximum v (6th axis) position value */
  390.     UINT wCaps;                 /* joystick capabilites */
  391.     UINT wMaxAxes;              /* maximum number of axes supported */
  392.     UINT wNumAxes;              /* number of axes in use */
  393.     UINT wMaxButtons;           /* maximum number of buttons supported */
  394.     char szRegKey[MAXPNAMELEN]; /* registry key */
  395.     char szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; /* OEM VxD in use */
  396. #endif
  397. } JOYCAPS, *PJOYCAPS, NEAR *NPJOYCAPS, FAR *LPJOYCAPS;
  398. #endif
  399. /* joystick information data structure */
  400. typedef struct joyinfo_tag {
  401.     UINT wXpos;                 /* x position */
  402.     UINT wYpos;                 /* y position */
  403.     UINT wZpos;                 /* z position */
  404.     UINT wButtons;              /* button states */
  405. } JOYINFO, *PJOYINFO, NEAR *NPJOYINFO, FAR *LPJOYINFO;
  406. #if(WINVER >= 0x0400)
  407. typedef struct joyinfoex_tag {
  408.     DWORD dwSize;                /* size of structure */
  409.     DWORD dwFlags;               /* flags to indicate what to return */
  410.     DWORD dwXpos;                /* x position */
  411.     DWORD dwYpos;                /* y position */
  412.     DWORD dwZpos;                /* z position */
  413.     DWORD dwRpos;                /* rudder/4th axis position */
  414.     DWORD dwUpos;                /* 5th axis position */
  415.     DWORD dwVpos;                /* 6th axis position */
  416.     DWORD dwButtons;             /* button states */
  417.     DWORD dwButtonNumber;        /* current button number pressed */
  418.     DWORD dwPOV;                 /* point of view state */
  419.     DWORD dwReserved1;           /* reserved for communication between winmm & driver */
  420.     DWORD dwReserved2;           /* reserved for future expansion */
  421. } JOYINFOEX, *PJOYINFOEX, NEAR *NPJOYINFOEX, FAR *LPJOYINFOEX;
  422. #endif /* WINVER >= 0x0400 */
  423. /* joystick function prototypes */
  424. WINMMAPI UINT WINAPI joyGetNumDevs(void);
  425. #ifdef _WIN32
  426. WINMMAPI MMRESULT WINAPI joyGetDevCapsA( IN UINT_PTR uJoyID, OUT LPJOYCAPSA pjc, IN UINT cbjc);
  427. WINMMAPI MMRESULT WINAPI joyGetDevCapsW( IN UINT_PTR uJoyID, OUT LPJOYCAPSW pjc, IN UINT cbjc);
  428. #ifdef UNICODE
  429. #define joyGetDevCaps  joyGetDevCapsW
  430. #else
  431. #define joyGetDevCaps  joyGetDevCapsA
  432. #endif // !UNICODE
  433. #else
  434. MMRESULT WINAPI joyGetDevCaps(UINT uJoyID, LPJOYCAPS pjc, UINT cbjc);
  435. #endif
  436. WINMMAPI MMRESULT WINAPI joyGetPos( IN UINT uJoyID, OUT LPJOYINFO pji);
  437. #if(WINVER >= 0x0400)
  438. WINMMAPI MMRESULT WINAPI joyGetPosEx( IN UINT uJoyID, OUT LPJOYINFOEX pji);
  439. #endif /* WINVER >= 0x0400 */
  440. WINMMAPI MMRESULT WINAPI joyGetThreshold( IN UINT uJoyID, OUT LPUINT puThreshold);
  441. WINMMAPI MMRESULT WINAPI joyReleaseCapture( IN UINT uJoyID);
  442. WINMMAPI MMRESULT WINAPI joySetCapture( IN HWND hwnd, IN UINT uJoyID, IN UINT uPeriod,
  443.     IN BOOL fChanged);
  444. WINMMAPI MMRESULT WINAPI joySetThreshold( IN UINT uJoyID, IN UINT uThreshold);
  445. #endif  /* ifndef MMNOJOY */
  446. #ifndef MMNOMMIO
  447. /****************************************************************************
  448.                         Multimedia File I/O support
  449. ****************************************************************************/
  450. /* MMIO error return values */
  451. #define MMIOERR_BASE                256
  452. #define MMIOERR_FILENOTFOUND        (MMIOERR_BASE + 1)  /* file not found */
  453. #define MMIOERR_OUTOFMEMORY         (MMIOERR_BASE + 2)  /* out of memory */
  454. #define MMIOERR_CANNOTOPEN          (MMIOERR_BASE + 3)  /* cannot open */
  455. #define MMIOERR_CANNOTCLOSE         (MMIOERR_BASE + 4)  /* cannot close */
  456. #define MMIOERR_CANNOTREAD          (MMIOERR_BASE + 5)  /* cannot read */
  457. #define MMIOERR_CANNOTWRITE         (MMIOERR_BASE + 6)  /* cannot write */
  458. #define MMIOERR_CANNOTSEEK          (MMIOERR_BASE + 7)  /* cannot seek */
  459. #define MMIOERR_CANNOTEXPAND        (MMIOERR_BASE + 8)  /* cannot expand file */
  460. #define MMIOERR_CHUNKNOTFOUND       (MMIOERR_BASE + 9)  /* chunk not found */
  461. #define MMIOERR_UNBUFFERED          (MMIOERR_BASE + 10) /*  */
  462. #define MMIOERR_PATHNOTFOUND        (MMIOERR_BASE + 11) /* path incorrect */
  463. #define MMIOERR_ACCESSDENIED        (MMIOERR_BASE + 12) /* file was protected */
  464. #define MMIOERR_SHARINGVIOLATION    (MMIOERR_BASE + 13) /* file in use */
  465. #define MMIOERR_NETWORKERROR        (MMIOERR_BASE + 14) /* network not responding */
  466. #define MMIOERR_TOOMANYOPENFILES    (MMIOERR_BASE + 15) /* no more file handles  */
  467. #define MMIOERR_INVALIDFILE         (MMIOERR_BASE + 16) /* default error file error */
  468. /* MMIO constants */
  469. #define CFSEPCHAR       '+'             /* compound file name separator char. */
  470. /* MMIO data types */
  471. typedef DWORD           FOURCC;         /* a four character code */
  472. typedef char _huge *    HPSTR;          /* a huge version of LPSTR */
  473. DECLARE_HANDLE(HMMIO);                  /* a handle to an open file */
  474. typedef LRESULT (CALLBACK MMIOPROC)(LPSTR lpmmioinfo, UINT uMsg,
  475.             LPARAM lParam1, LPARAM lParam2);
  476. typedef MMIOPROC FAR *LPMMIOPROC;
  477. /* general MMIO information data structure */
  478. typedef struct _MMIOINFO
  479. {
  480.         /* general fields */
  481.         DWORD           dwFlags;        /* general status flags */
  482.         FOURCC          fccIOProc;      /* pointer to I/O procedure */
  483.         LPMMIOPROC      pIOProc;        /* pointer to I/O procedure */
  484.         UINT            wErrorRet;      /* place for error to be returned */
  485.         HTASK           htask;          /* alternate local task */
  486.         /* fields maintained by MMIO functions during buffered I/O */
  487.         LONG            cchBuffer;      /* size of I/O buffer (or 0L) */
  488.         HPSTR           pchBuffer;      /* start of I/O buffer (or NULL) */
  489.         HPSTR           pchNext;        /* pointer to next byte to read/write */
  490.         HPSTR           pchEndRead;     /* pointer to last valid byte to read */
  491.         HPSTR           pchEndWrite;    /* pointer to last byte to write */
  492.         LONG            lBufOffset;     /* disk offset of start of buffer */
  493.         /* fields maintained by I/O procedure */
  494.         LONG            lDiskOffset;    /* disk offset of next read or write */
  495.         DWORD           adwInfo[3];     /* data specific to type of MMIOPROC */
  496.         /* other fields maintained by MMIO */
  497.         DWORD           dwReserved1;    /* reserved for MMIO use */
  498.         DWORD           dwReserved2;    /* reserved for MMIO use */
  499.         HMMIO           hmmio;          /* handle to open file */
  500. } MMIOINFO, *PMMIOINFO, NEAR *NPMMIOINFO, FAR *LPMMIOINFO;
  501. typedef const MMIOINFO FAR *LPCMMIOINFO;
  502. /* RIFF chunk information data structure */
  503. typedef struct _MMCKINFO
  504. {
  505.         FOURCC          ckid;           /* chunk ID */
  506.         DWORD           cksize;         /* chunk size */
  507.         FOURCC          fccType;        /* form type or list type */
  508.         DWORD           dwDataOffset;   /* offset of data portion of chunk */
  509.         DWORD           dwFlags;        /* flags used by MMIO functions */
  510. } MMCKINFO, *PMMCKINFO, NEAR *NPMMCKINFO, FAR *LPMMCKINFO;
  511. typedef const MMCKINFO *LPCMMCKINFO;
  512. /* bit field masks */
  513. #define MMIO_RWMODE     0x00000003      /* open file for reading/writing/both */
  514. #define MMIO_SHAREMODE  0x00000070      /* file sharing mode number */
  515. /* constants for dwFlags field of MMIOINFO */
  516. #define MMIO_CREATE     0x00001000      /* create new file (or truncate file) */
  517. #define MMIO_PARSE      0x00000100      /* parse new file returning path */
  518. #define MMIO_DELETE     0x00000200      /* create new file (or truncate file) */
  519. #define MMIO_EXIST      0x00004000      /* checks for existence of file */
  520. #define MMIO_ALLOCBUF   0x00010000      /* mmioOpen() should allocate a buffer */
  521. #define MMIO_GETTEMP    0x00020000      /* mmioOpen() should retrieve temp name */
  522. #define MMIO_DIRTY      0x10000000      /* I/O buffer is dirty */
  523. /* read/write mode numbers (bit field MMIO_RWMODE) */
  524. #define MMIO_READ       0x00000000      /* open file for reading only */
  525. #define MMIO_WRITE      0x00000001      /* open file for writing only */
  526. #define MMIO_READWRITE  0x00000002      /* open file for reading and writing */
  527. /* share mode numbers (bit field MMIO_SHAREMODE) */
  528. #define MMIO_COMPAT     0x00000000      /* compatibility mode */
  529. #define MMIO_EXCLUSIVE  0x00000010      /* exclusive-access mode */
  530. #define MMIO_DENYWRITE  0x00000020      /* deny writing to other processes */
  531. #define MMIO_DENYREAD   0x00000030      /* deny reading to other processes */
  532. #define MMIO_DENYNONE   0x00000040      /* deny nothing to other processes */
  533. /* various MMIO flags */
  534. #define MMIO_FHOPEN             0x0010  /* mmioClose: keep file handle open */
  535. #define MMIO_EMPTYBUF           0x0010  /* mmioFlush: empty the I/O buffer */
  536. #define MMIO_TOUPPER            0x0010  /* mmioStringToFOURCC: to u-case */
  537. #define MMIO_INSTALLPROC    0x00010000  /* mmioInstallIOProc: install MMIOProc */
  538. #define MMIO_GLOBALPROC     0x10000000  /* mmioInstallIOProc: install globally */
  539. #define MMIO_REMOVEPROC     0x00020000  /* mmioInstallIOProc: remove MMIOProc */
  540. #define MMIO_UNICODEPROC    0x01000000  /* mmioInstallIOProc: Unicode MMIOProc */
  541. #define MMIO_FINDPROC       0x00040000  /* mmioInstallIOProc: find an MMIOProc */
  542. #define MMIO_FINDCHUNK          0x0010  /* mmioDescend: find a chunk by ID */
  543. #define MMIO_FINDRIFF           0x0020  /* mmioDescend: find a LIST chunk */
  544. #define MMIO_FINDLIST           0x0040  /* mmioDescend: find a RIFF chunk */
  545. #define MMIO_CREATERIFF         0x0020  /* mmioCreateChunk: make a LIST chunk */
  546. #define MMIO_CREATELIST         0x0040  /* mmioCreateChunk: make a RIFF chunk */
  547. /* message numbers for MMIOPROC I/O procedure functions */
  548. #define MMIOM_READ      MMIO_READ       /* read */
  549. #define MMIOM_WRITE    MMIO_WRITE       /* write */
  550. #define MMIOM_SEEK              2       /* seek to a new position in file */
  551. #define MMIOM_OPEN              3       /* open file */
  552. #define MMIOM_CLOSE             4       /* close file */
  553. #define MMIOM_WRITEFLUSH        5       /* write and flush */
  554. #if (WINVER >= 0x030a)
  555. #define MMIOM_RENAME            6       /* rename specified file */
  556. #endif /* ifdef WINVER >= 0x030a */
  557. #define MMIOM_USER         0x8000       /* beginning of user-defined messages */
  558. /* standard four character codes */
  559. #define FOURCC_RIFF     mmioFOURCC('R', 'I', 'F', 'F')
  560. #define FOURCC_LIST     mmioFOURCC('L', 'I', 'S', 'T')
  561. /* four character codes used to identify standard built-in I/O procedures */
  562. #define FOURCC_DOS      mmioFOURCC('D', 'O', 'S', ' ')
  563. #define FOURCC_MEM      mmioFOURCC('M', 'E', 'M', ' ')
  564. /* flags for mmioSeek() */
  565. #ifndef SEEK_SET
  566. #define SEEK_SET        0               /* seek to an absolute position */
  567. #define SEEK_CUR        1               /* seek relative to current position */
  568. #define SEEK_END        2               /* seek relative to end of file */
  569. #endif  /* ifndef SEEK_SET */
  570. /* other constants */
  571. #define MMIO_DEFAULTBUFFER      8192    /* default buffer size */
  572. /* MMIO macros */
  573. #define mmioFOURCC(ch0, ch1, ch2, ch3)  MAKEFOURCC(ch0, ch1, ch2, ch3)
  574. /* MMIO function prototypes */
  575. #ifdef _WIN32
  576. WINMMAPI FOURCC WINAPI mmioStringToFOURCCA( IN LPCSTR sz, IN UINT uFlags);
  577. WINMMAPI FOURCC WINAPI mmioStringToFOURCCW( IN LPCWSTR sz, IN UINT uFlags);
  578. #ifdef UNICODE
  579. #define mmioStringToFOURCC  mmioStringToFOURCCW
  580. #else
  581. #define mmioStringToFOURCC  mmioStringToFOURCCA
  582. #endif // !UNICODE
  583. WINMMAPI LPMMIOPROC WINAPI mmioInstallIOProcA( IN FOURCC fccIOProc, IN LPMMIOPROC pIOProc, IN DWORD dwFlags);
  584. WINMMAPI LPMMIOPROC WINAPI mmioInstallIOProcW( IN FOURCC fccIOProc, IN LPMMIOPROC pIOProc, IN DWORD dwFlags);
  585. #ifdef UNICODE
  586. #define mmioInstallIOProc  mmioInstallIOProcW
  587. #else
  588. #define mmioInstallIOProc  mmioInstallIOProcA
  589. #endif // !UNICODE
  590. WINMMAPI HMMIO WINAPI mmioOpenA( IN OUT LPSTR pszFileName, IN OUT LPMMIOINFO pmmioinfo, IN DWORD fdwOpen);
  591. WINMMAPI HMMIO WINAPI mmioOpenW( IN OUT LPWSTR pszFileName, IN OUT LPMMIOINFO pmmioinfo, IN DWORD fdwOpen);
  592. #ifdef UNICODE
  593. #define mmioOpen  mmioOpenW
  594. #else
  595. #define mmioOpen  mmioOpenA
  596. #endif // !UNICODE
  597. WINMMAPI MMRESULT WINAPI mmioRenameA( IN LPCSTR pszFileName, IN LPCSTR pszNewFileName, IN LPCMMIOINFO pmmioinfo, IN DWORD fdwRename);
  598. WINMMAPI MMRESULT WINAPI mmioRenameW( IN LPCWSTR pszFileName, IN LPCWSTR pszNewFileName, IN LPCMMIOINFO pmmioinfo, IN DWORD fdwRename);
  599. #ifdef UNICODE
  600. #define mmioRename  mmioRenameW
  601. #else
  602. #define mmioRename  mmioRenameA
  603. #endif // !UNICODE
  604. #else
  605. FOURCC WINAPI mmioStringToFOURCC( LPCSTR sz, UINT uFlags);
  606. LPMMIOPROC WINAPI mmioInstallIOProc( FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags);
  607. HMMIO WINAPI mmioOpen(LPSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen);
  608. #if (WINVER >= 0x030a)
  609. MMRESULT WINAPI mmioRename( IN LPCSTR pszFileName, IN LPCSTR pszNewFileName, IN const MMIOINFO FAR* pmmioinfo, IN DWORD fdwRename);
  610. #endif /* ifdef WINVER >= 0x030a */
  611. #endif
  612. WINMMAPI MMRESULT WINAPI mmioClose( IN HMMIO hmmio, IN UINT fuClose);
  613. WINMMAPI LONG WINAPI mmioRead( IN HMMIO hmmio, OUT HPSTR pch, IN LONG cch);
  614. WINMMAPI LONG WINAPI mmioWrite( IN HMMIO hmmio, IN const char _huge* pch, IN LONG cch);
  615. WINMMAPI LONG WINAPI mmioSeek( IN HMMIO hmmio, IN LONG lOffset, IN int iOrigin);
  616. WINMMAPI MMRESULT WINAPI mmioGetInfo( IN HMMIO hmmio, OUT LPMMIOINFO pmmioinfo, IN UINT fuInfo);
  617. WINMMAPI MMRESULT WINAPI mmioSetInfo( IN HMMIO hmmio, IN LPCMMIOINFO pmmioinfo, IN UINT fuInfo);
  618. WINMMAPI MMRESULT WINAPI mmioSetBuffer( IN HMMIO hmmio, IN LPSTR pchBuffer, IN LONG cchBuffer,
  619.     IN UINT fuBuffer);
  620. WINMMAPI MMRESULT WINAPI mmioFlush( IN HMMIO hmmio, IN UINT fuFlush);
  621. WINMMAPI MMRESULT WINAPI mmioAdvance( IN HMMIO hmmio, IN OUT LPMMIOINFO pmmioinfo, IN UINT fuAdvance);
  622. WINMMAPI LRESULT WINAPI mmioSendMessage( IN HMMIO hmmio, IN UINT uMsg,
  623.     IN LPARAM lParam1, IN LPARAM lParam2);
  624. WINMMAPI MMRESULT WINAPI mmioDescend( IN HMMIO hmmio, IN OUT LPMMCKINFO pmmcki,
  625.     IN const MMCKINFO FAR* pmmckiParent, IN UINT fuDescend);
  626. WINMMAPI MMRESULT WINAPI mmioAscend( IN HMMIO hmmio, IN LPMMCKINFO pmmcki, IN UINT fuAscend);
  627. WINMMAPI MMRESULT WINAPI mmioCreateChunk(IN HMMIO hmmio, IN LPMMCKINFO pmmcki, IN UINT fuCreate);
  628. #endif  /* ifndef MMNOMMIO */
  629. #ifndef MMNOMCI
  630. /****************************************************************************
  631.                             MCI support
  632. ****************************************************************************/
  633. #ifndef _MCIERROR_              /* MCIERROR is defined in some post 3.1 apps */
  634. #define _MCIERROR_
  635. typedef DWORD   MCIERROR;       /* error return code, 0 means no error */
  636. #endif
  637. #ifndef _MCIDEVICEID_           /* Same with MCIDEVICEID */
  638. #define _MCIDEVICEID_
  639. typedef UINT    MCIDEVICEID;    /* MCI device ID type */
  640. #endif
  641. typedef UINT (CALLBACK *YIELDPROC)(MCIDEVICEID mciId, DWORD dwYieldData);
  642. /* MCI function prototypes */
  643. #ifdef _WIN32
  644. WINMMAPI MCIERROR WINAPI mciSendCommandA( IN MCIDEVICEID mciId, IN UINT uMsg, IN DWORD_PTR dwParam1, IN DWORD_PTR dwParam2);
  645. WINMMAPI MCIERROR WINAPI mciSendCommandW( IN MCIDEVICEID mciId, IN UINT uMsg, IN DWORD_PTR dwParam1, IN DWORD_PTR dwParam2);
  646. #ifdef UNICODE
  647. #define mciSendCommand  mciSendCommandW
  648. #else
  649. #define mciSendCommand  mciSendCommandA
  650. #endif // !UNICODE
  651. WINMMAPI MCIERROR  WINAPI mciSendStringA( IN LPCSTR lpstrCommand, OUT LPSTR lpstrReturnString, IN UINT uReturnLength, IN HWND hwndCallback);
  652. WINMMAPI MCIERROR  WINAPI mciSendStringW( IN LPCWSTR lpstrCommand, OUT LPWSTR lpstrReturnString, IN UINT uReturnLength, IN HWND hwndCallback);
  653. #ifdef UNICODE
  654. #define mciSendString  mciSendStringW
  655. #else
  656. #define mciSendString  mciSendStringA
  657. #endif // !UNICODE
  658. WINMMAPI MCIDEVICEID WINAPI mciGetDeviceIDA( IN LPCSTR pszDevice);
  659. WINMMAPI MCIDEVICEID WINAPI mciGetDeviceIDW( IN LPCWSTR pszDevice);
  660. #ifdef UNICODE
  661. #define mciGetDeviceID  mciGetDeviceIDW
  662. #else
  663. #define mciGetDeviceID  mciGetDeviceIDA
  664. #endif // !UNICODE
  665. WINMMAPI MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDA( IN DWORD dwElementID, IN LPCSTR lpstrType );
  666. WINMMAPI MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW( IN DWORD dwElementID, IN LPCWSTR lpstrType );
  667. #ifdef UNICODE
  668. #define mciGetDeviceIDFromElementID  mciGetDeviceIDFromElementIDW
  669. #else
  670. #define mciGetDeviceIDFromElementID  mciGetDeviceIDFromElementIDA
  671. #endif // !UNICODE
  672. WINMMAPI BOOL WINAPI mciGetErrorStringA( IN MCIERROR mcierr, OUT LPSTR pszText, IN UINT cchText);
  673. WINMMAPI BOOL WINAPI mciGetErrorStringW( IN MCIERROR mcierr, OUT LPWSTR pszText, IN UINT cchText);
  674. #ifdef UNICODE
  675. #define mciGetErrorString  mciGetErrorStringW
  676. #else
  677. #define mciGetErrorString  mciGetErrorStringA
  678. #endif // !UNICODE
  679. #else
  680. MCIERROR WINAPI mciSendCommand(MCIDEVICEID mciId, UINT uMsg, DWORD dwParam1, DWORD dwParam2);
  681. MCIERROR  WINAPI mciSendString(LPCSTR lpstrCommand, LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback);
  682. MCIDEVICEID WINAPI mciGetDeviceID(LPCSTR pszDevice);
  683. BOOL WINAPI mciGetErrorString(MCIERROR mcierr, LPSTR pszText, UINT cchText);
  684. #endif
  685. WINMMAPI BOOL WINAPI mciSetYieldProc( IN MCIDEVICEID mciId, IN YIELDPROC fpYieldProc,
  686.     IN DWORD dwYieldData);
  687. #if (WINVER >= 0x030a)
  688. WINMMAPI HTASK WINAPI mciGetCreatorTask( IN MCIDEVICEID mciId);
  689. WINMMAPI YIELDPROC WINAPI mciGetYieldProc( IN MCIDEVICEID mciId, IN LPDWORD pdwYieldData);
  690. #endif /* ifdef WINVER >= 0x030a */
  691. #if (WINVER < 0x030a)
  692. WINMMAPI BOOL WINAPI mciExecute(LPCSTR pszCommand);
  693. #endif /* ifdef WINVER < 0x030a */
  694. /* MCI error return values */
  695. #define MCIERR_INVALID_DEVICE_ID        (MCIERR_BASE + 1)
  696. #define MCIERR_UNRECOGNIZED_KEYWORD     (MCIERR_BASE + 3)
  697. #define MCIERR_UNRECOGNIZED_COMMAND     (MCIERR_BASE + 5)
  698. #define MCIERR_HARDWARE                 (MCIERR_BASE + 6)
  699. #define MCIERR_INVALID_DEVICE_NAME      (MCIERR_BASE + 7)
  700. #define MCIERR_OUT_OF_MEMORY            (MCIERR_BASE + 8)
  701. #define MCIERR_DEVICE_OPEN              (MCIERR_BASE + 9)
  702. #define MCIERR_CANNOT_LOAD_DRIVER       (MCIERR_BASE + 10)
  703. #define MCIERR_MISSING_COMMAND_STRING   (MCIERR_BASE + 11)
  704. #define MCIERR_PARAM_OVERFLOW           (MCIERR_BASE + 12)
  705. #define MCIERR_MISSING_STRING_ARGUMENT  (MCIERR_BASE + 13)
  706. #define MCIERR_BAD_INTEGER              (MCIERR_BASE + 14)
  707. #define MCIERR_PARSER_INTERNAL          (MCIERR_BASE + 15)
  708. #define MCIERR_DRIVER_INTERNAL          (MCIERR_BASE + 16)
  709. #define MCIERR_MISSING_PARAMETER        (MCIERR_BASE + 17)
  710. #define MCIERR_UNSUPPORTED_FUNCTION     (MCIERR_BASE + 18)
  711. #define MCIERR_FILE_NOT_FOUND           (MCIERR_BASE + 19)
  712. #define MCIERR_DEVICE_NOT_READY         (MCIERR_BASE + 20)
  713. #define MCIERR_INTERNAL                 (MCIERR_BASE + 21)
  714. #define MCIERR_DRIVER                   (MCIERR_BASE + 22)
  715. #define MCIERR_CANNOT_USE_ALL           (MCIERR_BASE + 23)
  716. #define MCIERR_MULTIPLE                 (MCIERR_BASE + 24)
  717. #define MCIERR_EXTENSION_NOT_FOUND      (MCIERR_BASE + 25)
  718. #define MCIERR_OUTOFRANGE               (MCIERR_BASE + 26)
  719. #define MCIERR_FLAGS_NOT_COMPATIBLE     (MCIERR_BASE + 28)
  720. #define MCIERR_FILE_NOT_SAVED           (MCIERR_BASE + 30)
  721. #define MCIERR_DEVICE_TYPE_REQUIRED     (MCIERR_BASE + 31)
  722. #define MCIERR_DEVICE_LOCKED            (MCIERR_BASE + 32)
  723. #define MCIERR_DUPLICATE_ALIAS          (MCIERR_BASE + 33)
  724. #define MCIERR_BAD_CONSTANT             (MCIERR_BASE + 34)
  725. #define MCIERR_MUST_USE_SHAREABLE       (MCIERR_BASE + 35)
  726. #define MCIERR_MISSING_DEVICE_NAME      (MCIERR_BASE + 36)
  727. #define MCIERR_BAD_TIME_FORMAT          (MCIERR_BASE + 37)
  728. #define MCIERR_NO_CLOSING_QUOTE         (MCIERR_BASE + 38)
  729. #define MCIERR_DUPLICATE_FLAGS          (MCIERR_BASE + 39)
  730. #define MCIERR_INVALID_FILE             (MCIERR_BASE + 40)
  731. #define MCIERR_NULL_PARAMETER_BLOCK     (MCIERR_BASE + 41)
  732. #define MCIERR_UNNAMED_RESOURCE         (MCIERR_BASE + 42)
  733. #define MCIERR_NEW_REQUIRES_ALIAS       (MCIERR_BASE + 43)
  734. #define MCIERR_NOTIFY_ON_AUTO_OPEN      (MCIERR_BASE + 44)
  735. #define MCIERR_NO_ELEMENT_ALLOWED       (MCIERR_BASE + 45)
  736. #define MCIERR_NONAPPLICABLE_FUNCTION   (MCIERR_BASE + 46)
  737. #define MCIERR_ILLEGAL_FOR_AUTO_OPEN    (MCIERR_BASE + 47)
  738. #define MCIERR_FILENAME_REQUIRED        (MCIERR_BASE + 48)
  739. #define MCIERR_EXTRA_CHARACTERS         (MCIERR_BASE + 49)
  740. #define MCIERR_DEVICE_NOT_INSTALLED     (MCIERR_BASE + 50)
  741. #define MCIERR_GET_CD                   (MCIERR_BASE + 51)
  742. #define MCIERR_SET_CD                   (MCIERR_BASE + 52)
  743. #define MCIERR_SET_DRIVE                (MCIERR_BASE + 53)
  744. #define MCIERR_DEVICE_LENGTH            (MCIERR_BASE + 54)
  745. #define MCIERR_DEVICE_ORD_LENGTH        (MCIERR_BASE + 55)
  746. #define MCIERR_NO_INTEGER               (MCIERR_BASE + 56)
  747. #define MCIERR_WAVE_OUTPUTSINUSE        (MCIERR_BASE + 64)
  748. #define MCIERR_WAVE_SETOUTPUTINUSE      (MCIERR_BASE + 65)
  749. #define MCIERR_WAVE_INPUTSINUSE         (MCIERR_BASE + 66)
  750. #define MCIERR_WAVE_SETINPUTINUSE       (MCIERR_BASE + 67)
  751. #define MCIERR_WAVE_OUTPUTUNSPECIFIED   (MCIERR_BASE + 68)
  752. #define MCIERR_WAVE_INPUTUNSPECIFIED    (MCIERR_BASE + 69)
  753. #define MCIERR_WAVE_OUTPUTSUNSUITABLE   (MCIERR_BASE + 70)
  754. #define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE + 71)
  755. #define MCIERR_WAVE_INPUTSUNSUITABLE    (MCIERR_BASE + 72)
  756. #define MCIERR_WAVE_SETINPUTUNSUITABLE  (MCIERR_BASE + 73)
  757. #define MCIERR_SEQ_DIV_INCOMPATIBLE     (MCIERR_BASE + 80)
  758. #define MCIERR_SEQ_PORT_INUSE           (MCIERR_BASE + 81)
  759. #define MCIERR_SEQ_PORT_NONEXISTENT     (MCIERR_BASE + 82)
  760. #define MCIERR_SEQ_PORT_MAPNODEVICE     (MCIERR_BASE + 83)
  761. #define MCIERR_SEQ_PORT_MISCERROR       (MCIERR_BASE + 84)
  762. #define MCIERR_SEQ_TIMER                (MCIERR_BASE + 85)
  763. #define MCIERR_SEQ_PORTUNSPECIFIED      (MCIERR_BASE + 86)
  764. #define MCIERR_SEQ_NOMIDIPRESENT        (MCIERR_BASE + 87)
  765. #define MCIERR_NO_WINDOW                (MCIERR_BASE + 90)
  766. #define MCIERR_CREATEWINDOW             (MCIERR_BASE + 91)
  767. #define MCIERR_FILE_READ                (MCIERR_BASE + 92)
  768. #define MCIERR_FILE_WRITE               (MCIERR_BASE + 93)
  769. #define MCIERR_NO_IDENTITY              (MCIERR_BASE + 94)
  770. /* all custom device driver errors must be >= than this value */
  771. #define MCIERR_CUSTOM_DRIVER_BASE       (MCIERR_BASE + 256)
  772. #define MCI_FIRST                       DRV_MCI_FIRST   /* 0x0800 */
  773. /* MCI command message identifiers */
  774. #define MCI_OPEN                        0x0803
  775. #define MCI_CLOSE                       0x0804
  776. #define MCI_ESCAPE                      0x0805
  777. #define MCI_PLAY                        0x0806
  778. #define MCI_SEEK                        0x0807
  779. #define MCI_STOP                        0x0808
  780. #define MCI_PAUSE                       0x0809
  781. #define MCI_INFO                        0x080A
  782. #define MCI_GETDEVCAPS                  0x080B
  783. #define MCI_SPIN                        0x080C
  784. #define MCI_SET                         0x080D
  785. #define MCI_STEP                        0x080E
  786. #define MCI_RECORD                      0x080F
  787. #define MCI_SYSINFO                     0x0810
  788. #define MCI_BREAK                       0x0811
  789. #define MCI_SAVE                        0x0813
  790. #define MCI_STATUS                      0x0814
  791. #define MCI_CUE                         0x0830
  792. #define MCI_REALIZE                     0x0840
  793. #define MCI_WINDOW                      0x0841
  794. #define MCI_PUT                         0x0842
  795. #define MCI_WHERE                       0x0843
  796. #define MCI_FREEZE                      0x0844
  797. #define MCI_UNFREEZE                    0x0845
  798. #define MCI_LOAD                        0x0850
  799. #define MCI_CUT                         0x0851
  800. #define MCI_COPY                        0x0852
  801. #define MCI_PASTE                       0x0853
  802. #define MCI_UPDATE                      0x0854
  803. #define MCI_RESUME                      0x0855
  804. #define MCI_DELETE                      0x0856
  805. /* all custom MCI command messages must be >= than this value */
  806. #define MCI_USER_MESSAGES               (DRV_MCI_FIRST + 0x400)
  807. #define MCI_LAST                        0x0FFF
  808. /* device ID for "all devices" */
  809. #define MCI_ALL_DEVICE_ID               ((MCIDEVICEID)-1)
  810. /* constants for predefined MCI device types */
  811. #define MCI_DEVTYPE_VCR                 513 /* (MCI_STRING_OFFSET + 1) */
  812. #define MCI_DEVTYPE_VIDEODISC           514 /* (MCI_STRING_OFFSET + 2) */
  813. #define MCI_DEVTYPE_OVERLAY             515 /* (MCI_STRING_OFFSET + 3) */
  814. #define MCI_DEVTYPE_CD_AUDIO            516 /* (MCI_STRING_OFFSET + 4) */
  815. #define MCI_DEVTYPE_DAT                 517 /* (MCI_STRING_OFFSET + 5) */
  816. #define MCI_DEVTYPE_SCANNER             518 /* (MCI_STRING_OFFSET + 6) */
  817. #define MCI_DEVTYPE_ANIMATION           519 /* (MCI_STRING_OFFSET + 7) */
  818. #define MCI_DEVTYPE_DIGITAL_VIDEO       520 /* (MCI_STRING_OFFSET + 8) */
  819. #define MCI_DEVTYPE_OTHER               521 /* (MCI_STRING_OFFSET + 9) */
  820. #define MCI_DEVTYPE_WAVEFORM_AUDIO      522 /* (MCI_STRING_OFFSET + 10) */
  821. #define MCI_DEVTYPE_SEQUENCER           523 /* (MCI_STRING_OFFSET + 11) */
  822. #define MCI_DEVTYPE_FIRST               MCI_DEVTYPE_VCR
  823. #define MCI_DEVTYPE_LAST                MCI_DEVTYPE_SEQUENCER
  824. #define MCI_DEVTYPE_FIRST_USER          0x1000
  825. /* return values for 'status mode' command */
  826. #define MCI_MODE_NOT_READY              (MCI_STRING_OFFSET + 12)
  827. #define MCI_MODE_STOP                   (MCI_STRING_OFFSET + 13)
  828. #define MCI_MODE_PLAY                   (MCI_STRING_OFFSET + 14)
  829. #define MCI_MODE_RECORD                 (MCI_STRING_OFFSET + 15)
  830. #define MCI_MODE_SEEK                   (MCI_STRING_OFFSET + 16)
  831. #define MCI_MODE_PAUSE                  (MCI_STRING_OFFSET + 17)
  832. #define MCI_MODE_OPEN                   (MCI_STRING_OFFSET + 18)
  833. /* constants used in 'set time format' and 'status time format' commands */
  834. #define MCI_FORMAT_MILLISECONDS         0
  835. #define MCI_FORMAT_HMS                  1
  836. #define MCI_FORMAT_MSF                  2
  837. #define MCI_FORMAT_FRAMES               3
  838. #define MCI_FORMAT_SMPTE_24             4
  839. #define MCI_FORMAT_SMPTE_25             5
  840. #define MCI_FORMAT_SMPTE_30             6
  841. #define MCI_FORMAT_SMPTE_30DROP         7
  842. #define MCI_FORMAT_BYTES                8
  843. #define MCI_FORMAT_SAMPLES              9
  844. #define MCI_FORMAT_TMSF                 10
  845. /* MCI time format conversion macros */
  846. #define MCI_MSF_MINUTE(msf)             ((BYTE)(msf))
  847. #define MCI_MSF_SECOND(msf)             ((BYTE)(((WORD)(msf)) >> 8))
  848. #define MCI_MSF_FRAME(msf)              ((BYTE)((msf)>>16))
  849. #define MCI_MAKE_MSF(m, s, f)           ((DWORD)(((BYTE)(m) | 
  850.                                                   ((WORD)(s)<<8)) | 
  851.                                                  (((DWORD)(BYTE)(f))<<16)))
  852. #define MCI_TMSF_TRACK(tmsf)            ((BYTE)(tmsf))
  853. #define MCI_TMSF_MINUTE(tmsf)           ((BYTE)(((WORD)(tmsf)) >> 8))
  854. #define MCI_TMSF_SECOND(tmsf)           ((BYTE)((tmsf)>>16))
  855. #define MCI_TMSF_FRAME(tmsf)            ((BYTE)((tmsf)>>24))
  856. #define MCI_MAKE_TMSF(t, m, s, f)       ((DWORD)(((BYTE)(t) | 
  857.                                                   ((WORD)(m)<<8)) | 
  858.                                                  (((DWORD)(BYTE)(s) | 
  859.                                                    ((WORD)(f)<<8))<<16)))
  860. #define MCI_HMS_HOUR(hms)               ((BYTE)(hms))
  861. #define MCI_HMS_MINUTE(hms)             ((BYTE)(((WORD)(hms)) >> 8))
  862. #define MCI_HMS_SECOND(hms)             ((BYTE)((hms)>>16))
  863. #define MCI_MAKE_HMS(h, m, s)           ((DWORD)(((BYTE)(h) | 
  864.                                                   ((WORD)(m)<<8)) | 
  865.                                                  (((DWORD)(BYTE)(s))<<16)))
  866. /* flags for wParam of MM_MCINOTIFY message */
  867. #define MCI_NOTIFY_SUCCESSFUL           0x0001
  868. #define MCI_NOTIFY_SUPERSEDED           0x0002
  869. #define MCI_NOTIFY_ABORTED              0x0004
  870. #define MCI_NOTIFY_FAILURE              0x0008
  871. /* common flags for dwFlags parameter of MCI command messages */
  872. #define MCI_NOTIFY                      0x00000001L
  873. #define MCI_WAIT                        0x00000002L
  874. #define MCI_FROM                        0x00000004L
  875. #define MCI_TO                          0x00000008L
  876. #define MCI_TRACK                       0x00000010L
  877. /* flags for dwFlags parameter of MCI_OPEN command message */
  878. #define MCI_OPEN_SHAREABLE              0x00000100L
  879. #define MCI_OPEN_ELEMENT                0x00000200L
  880. #define MCI_OPEN_ALIAS                  0x00000400L
  881. #define MCI_OPEN_ELEMENT_ID             0x00000800L
  882. #define MCI_OPEN_TYPE_ID                0x00001000L
  883. #define MCI_OPEN_TYPE                   0x00002000L
  884. /* flags for dwFlags parameter of MCI_SEEK command message */
  885. #define MCI_SEEK_TO_START               0x00000100L
  886. #define MCI_SEEK_TO_END                 0x00000200L
  887. /* flags for dwFlags parameter of MCI_STATUS command message */
  888. #define MCI_STATUS_ITEM                 0x00000100L
  889. #define MCI_STATUS_START                0x00000200L
  890. /* flags for dwItem field of the MCI_STATUS_PARMS parameter block */
  891. #define MCI_STATUS_LENGTH               0x00000001L
  892. #define MCI_STATUS_POSITION             0x00000002L
  893. #define MCI_STATUS_NUMBER_OF_TRACKS     0x00000003L
  894. #define MCI_STATUS_MODE                 0x00000004L
  895. #define MCI_STATUS_MEDIA_PRESENT        0x00000005L
  896. #define MCI_STATUS_TIME_FORMAT          0x00000006L
  897. #define MCI_STATUS_READY                0x00000007L
  898. #define MCI_STATUS_CURRENT_TRACK        0x00000008L
  899. /* flags for dwFlags parameter of MCI_INFO command message */
  900. #define MCI_INFO_PRODUCT                0x00000100L
  901. #define MCI_INFO_FILE                   0x00000200L
  902. #define MCI_INFO_MEDIA_UPC              0x00000400L
  903. #define MCI_INFO_MEDIA_IDENTITY         0x00000800L
  904. #define MCI_INFO_NAME                   0x00001000L
  905. #define MCI_INFO_COPYRIGHT              0x00002000L
  906. /* flags for dwFlags parameter of MCI_GETDEVCAPS command message */
  907. #define MCI_GETDEVCAPS_ITEM             0x00000100L
  908. /* flags for dwItem field of the MCI_GETDEVCAPS_PARMS parameter block */
  909. #define MCI_GETDEVCAPS_CAN_RECORD       0x00000001L
  910. #define MCI_GETDEVCAPS_HAS_AUDIO        0x00000002L
  911. #define MCI_GETDEVCAPS_HAS_VIDEO        0x00000003L
  912. #define MCI_GETDEVCAPS_DEVICE_TYPE      0x00000004L
  913. #define MCI_GETDEVCAPS_USES_FILES       0x00000005L
  914. #define MCI_GETDEVCAPS_COMPOUND_DEVICE  0x00000006L
  915. #define MCI_GETDEVCAPS_CAN_EJECT        0x00000007L
  916. #define MCI_GETDEVCAPS_CAN_PLAY         0x00000008L
  917. #define MCI_GETDEVCAPS_CAN_SAVE         0x00000009L
  918. /* flags for dwFlags parameter of MCI_SYSINFO command message */
  919. #define MCI_SYSINFO_QUANTITY            0x00000100L
  920. #define MCI_SYSINFO_OPEN                0x00000200L
  921. #define MCI_SYSINFO_NAME                0x00000400L
  922. #define MCI_SYSINFO_INSTALLNAME         0x00000800L
  923. /* flags for dwFlags parameter of MCI_SET command message */
  924. #define MCI_SET_DOOR_OPEN               0x00000100L
  925. #define MCI_SET_DOOR_CLOSED             0x00000200L
  926. #define MCI_SET_TIME_FORMAT             0x00000400L
  927. #define MCI_SET_AUDIO                   0x00000800L
  928. #define MCI_SET_VIDEO                   0x00001000L
  929. #define MCI_SET_ON                      0x00002000L
  930. #define MCI_SET_OFF                     0x00004000L
  931. /* flags for dwAudio field of MCI_SET_PARMS or MCI_SEQ_SET_PARMS */
  932. #define MCI_SET_AUDIO_ALL               0x00000000L
  933. #define MCI_SET_AUDIO_LEFT              0x00000001L
  934. #define MCI_SET_AUDIO_RIGHT             0x00000002L
  935. /* flags for dwFlags parameter of MCI_BREAK command message */
  936. #define MCI_BREAK_KEY                   0x00000100L
  937. #define MCI_BREAK_HWND                  0x00000200L
  938. #define MCI_BREAK_OFF                   0x00000400L
  939. /* flags for dwFlags parameter of MCI_RECORD command message */
  940. #define MCI_RECORD_INSERT               0x00000100L
  941. #define MCI_RECORD_OVERWRITE            0x00000200L
  942. /* flags for dwFlags parameter of MCI_SAVE command message */
  943. #define MCI_SAVE_FILE                   0x00000100L
  944. /* flags for dwFlags parameter of MCI_LOAD command message */
  945. #define MCI_LOAD_FILE                   0x00000100L
  946. /* generic parameter block for MCI command messages with no special parameters */
  947. typedef struct tagMCI_GENERIC_PARMS {
  948.     DWORD_PTR   dwCallback;
  949. } MCI_GENERIC_PARMS, *PMCI_GENERIC_PARMS, FAR *LPMCI_GENERIC_PARMS;
  950. /* parameter block for MCI_OPEN command message */
  951. #ifdef _WIN32
  952. typedef struct tagMCI_OPEN_PARMSA {
  953.     DWORD_PTR   dwCallback;
  954.     MCIDEVICEID wDeviceID;
  955.     LPCSTR     lpstrDeviceType;
  956.     LPCSTR     lpstrElementName;
  957.     LPCSTR     lpstrAlias;
  958. } MCI_OPEN_PARMSA, *PMCI_OPEN_PARMSA, *LPMCI_OPEN_PARMSA;
  959. typedef struct tagMCI_OPEN_PARMSW {
  960.     DWORD_PTR   dwCallback;
  961.     MCIDEVICEID wDeviceID;
  962.     LPCWSTR    lpstrDeviceType;
  963.     LPCWSTR    lpstrElementName;
  964.     LPCWSTR    lpstrAlias;
  965. } MCI_OPEN_PARMSW, *PMCI_OPEN_PARMSW, *LPMCI_OPEN_PARMSW;
  966. #ifdef UNICODE
  967. typedef MCI_OPEN_PARMSW MCI_OPEN_PARMS;
  968. typedef PMCI_OPEN_PARMSW PMCI_OPEN_PARMS;
  969. typedef LPMCI_OPEN_PARMSW LPMCI_OPEN_PARMS;
  970. #else
  971. typedef MCI_OPEN_PARMSA MCI_OPEN_PARMS;
  972. typedef PMCI_OPEN_PARMSA PMCI_OPEN_PARMS;
  973. typedef LPMCI_OPEN_PARMSA LPMCI_OPEN_PARMS;
  974. #endif // UNICODE
  975. #else
  976. typedef struct tagMCI_OPEN_PARMS {
  977.     DWORD       dwCallback;
  978.     MCIDEVICEID wDeviceID;
  979.     WORD        wReserved0;
  980.     LPCSTR      lpstrDeviceType;
  981.     LPCSTR      lpstrElementName;
  982.     LPCSTR      lpstrAlias;
  983. } MCI_OPEN_PARMS, FAR *LPMCI_OPEN_PARMS;
  984. #endif
  985. /* parameter block for MCI_PLAY command message */
  986. typedef struct tagMCI_PLAY_PARMS {
  987.     DWORD_PTR   dwCallback;
  988.     DWORD       dwFrom;
  989.     DWORD       dwTo;
  990. } MCI_PLAY_PARMS, *PMCI_PLAY_PARMS, FAR *LPMCI_PLAY_PARMS;
  991. /* parameter block for MCI_SEEK command message */
  992. typedef struct tagMCI_SEEK_PARMS {
  993.     DWORD_PTR   dwCallback;
  994.     DWORD       dwTo;
  995. } MCI_SEEK_PARMS, *PMCI_SEEK_PARMS, FAR *LPMCI_SEEK_PARMS;
  996. /* parameter block for MCI_STATUS command message */
  997. typedef struct tagMCI_STATUS_PARMS {
  998.     DWORD_PTR   dwCallback;
  999.     DWORD_PTR   dwReturn;
  1000.     DWORD       dwItem;
  1001.     DWORD       dwTrack;
  1002. } MCI_STATUS_PARMS, *PMCI_STATUS_PARMS, FAR * LPMCI_STATUS_PARMS;
  1003. /* parameter block for MCI_INFO command message */
  1004. #ifdef _WIN32
  1005. typedef struct tagMCI_INFO_PARMSA {
  1006.     DWORD_PTR dwCallback;
  1007.     LPSTR     lpstrReturn;
  1008.     DWORD     dwRetSize;
  1009. } MCI_INFO_PARMSA, * LPMCI_INFO_PARMSA;
  1010. typedef struct tagMCI_INFO_PARMSW {
  1011.     DWORD_PTR dwCallback;
  1012.     LPWSTR    lpstrReturn;
  1013.     DWORD     dwRetSize;
  1014. } MCI_INFO_PARMSW, * LPMCI_INFO_PARMSW;
  1015. #ifdef UNICODE
  1016. typedef MCI_INFO_PARMSW MCI_INFO_PARMS;
  1017. typedef LPMCI_INFO_PARMSW LPMCI_INFO_PARMS;
  1018. #else
  1019. typedef MCI_INFO_PARMSA MCI_INFO_PARMS;
  1020. typedef LPMCI_INFO_PARMSA LPMCI_INFO_PARMS;
  1021. #endif // UNICODE
  1022. #else
  1023. typedef struct tagMCI_INFO_PARMS {
  1024.     DWORD   dwCallback;
  1025.     LPSTR   lpstrReturn;
  1026.     DWORD   dwRetSize;
  1027. } MCI_INFO_PARMS, FAR * LPMCI_INFO_PARMS;
  1028. #endif
  1029. /* parameter block for MCI_GETDEVCAPS command message */
  1030. typedef struct tagMCI_GETDEVCAPS_PARMS {
  1031.     DWORD_PTR   dwCallback;
  1032.     DWORD       dwReturn;
  1033.     DWORD       dwItem;
  1034. } MCI_GETDEVCAPS_PARMS, *PMCI_GETDEVCAPS_PARMS, FAR * LPMCI_GETDEVCAPS_PARMS;
  1035. /* parameter block for MCI_SYSINFO command message */
  1036. #ifdef _WIN32
  1037. typedef struct tagMCI_SYSINFO_PARMSA {
  1038.     DWORD_PTR   dwCallback;
  1039.     LPSTR       lpstrReturn;
  1040.     DWORD       dwRetSize;
  1041.     DWORD       dwNumber;
  1042.     UINT        wDeviceType;
  1043. } MCI_SYSINFO_PARMSA, *PMCI_SYSINFO_PARMSA, * LPMCI_SYSINFO_PARMSA;
  1044. typedef struct tagMCI_SYSINFO_PARMSW {
  1045.     DWORD_PTR   dwCallback;
  1046.     LPWSTR      lpstrReturn;
  1047.     DWORD       dwRetSize;
  1048.     DWORD       dwNumber;
  1049.     UINT        wDeviceType;
  1050. } MCI_SYSINFO_PARMSW, *PMCI_SYSINFO_PARMSW, * LPMCI_SYSINFO_PARMSW;
  1051. #ifdef UNICODE
  1052. typedef MCI_SYSINFO_PARMSW MCI_SYSINFO_PARMS;
  1053. typedef PMCI_SYSINFO_PARMSW PMCI_SYSINFO_PARMS;
  1054. typedef LPMCI_SYSINFO_PARMSW LPMCI_SYSINFO_PARMS;
  1055. #else
  1056. typedef MCI_SYSINFO_PARMSA MCI_SYSINFO_PARMS;
  1057. typedef PMCI_SYSINFO_PARMSA PMCI_SYSINFO_PARMS;
  1058. typedef LPMCI_SYSINFO_PARMSA LPMCI_SYSINFO_PARMS;
  1059. #endif // UNICODE
  1060. #else
  1061. typedef struct tagMCI_SYSINFO_PARMS {
  1062.     DWORD   dwCallback;
  1063.     LPSTR   lpstrReturn;
  1064.     DWORD   dwRetSize;
  1065.     DWORD   dwNumber;
  1066.     WORD    wDeviceType;
  1067.     WORD    wReserved0;
  1068. } MCI_SYSINFO_PARMS, FAR * LPMCI_SYSINFO_PARMS;
  1069. #endif
  1070. /* parameter block for MCI_SET command message */
  1071. typedef struct tagMCI_SET_PARMS {
  1072.     DWORD_PTR   dwCallback;
  1073.     DWORD       dwTimeFormat;
  1074.     DWORD       dwAudio;
  1075. } MCI_SET_PARMS, *PMCI_SET_PARMS, FAR *LPMCI_SET_PARMS;
  1076. /* parameter block for MCI_BREAK command message */
  1077. typedef struct tagMCI_BREAK_PARMS {
  1078.     DWORD_PTR   dwCallback;
  1079. #ifdef _WIN32
  1080.     int         nVirtKey;
  1081.     HWND        hwndBreak;
  1082. #else
  1083.     short       nVirtKey;
  1084.     WORD        wReserved0;             /* padding for Win 16 */
  1085.     HWND        hwndBreak;
  1086.     WORD        wReserved1;             /* padding for Win 16 */
  1087. #endif
  1088. } MCI_BREAK_PARMS, *PMCI_BREAK_PARMS, FAR * LPMCI_BREAK_PARMS;
  1089. /* parameter block for MCI_SAVE command message */
  1090. #ifdef _WIN32
  1091. typedef struct tagMCI_SAVE_PARMSA {
  1092.     DWORD_PTR    dwCallback;
  1093.     LPCSTR       lpfilename;
  1094. } MCI_SAVE_PARMSA, *PMCI_SAVE_PARMSA, * LPMCI_SAVE_PARMSA;
  1095. typedef struct tagMCI_SAVE_PARMSW {
  1096.     DWORD_PTR    dwCallback;
  1097.     LPCWSTR      lpfilename;
  1098. } MCI_SAVE_PARMSW, *PMCI_SAVE_PARMSW, * LPMCI_SAVE_PARMSW;
  1099. #ifdef UNICODE
  1100. typedef MCI_SAVE_PARMSW MCI_SAVE_PARMS;
  1101. typedef PMCI_SAVE_PARMSW PMCI_SAVE_PARMS;
  1102. typedef LPMCI_SAVE_PARMSW LPMCI_SAVE_PARMS;
  1103. #else
  1104. typedef MCI_SAVE_PARMSA MCI_SAVE_PARMS;
  1105. typedef PMCI_SAVE_PARMSA PMCI_SAVE_PARMS;
  1106. typedef LPMCI_SAVE_PARMSA LPMCI_SAVE_PARMS;
  1107. #endif // UNICODE
  1108. #else
  1109. typedef struct tagMCI_SAVE_PARMS {
  1110.     DWORD_PTR   dwCallback;
  1111.     LPCSTR      lpfilename;
  1112. } MCI_SAVE_PARMS, FAR * LPMCI_SAVE_PARMS;
  1113. #endif
  1114. /* parameter block for MCI_LOAD command message */
  1115. #ifdef _WIN32
  1116. typedef struct tagMCI_LOAD_PARMSA {
  1117.     DWORD_PTR    dwCallback;
  1118.     LPCSTR       lpfilename;
  1119. } MCI_LOAD_PARMSA, *PMCI_LOAD_PARMSA, * LPMCI_LOAD_PARMSA;
  1120. typedef struct tagMCI_LOAD_PARMSW {
  1121.     DWORD_PTR    dwCallback;
  1122.     LPCWSTR      lpfilename;
  1123. } MCI_LOAD_PARMSW, *PMCI_LOAD_PARMSW, * LPMCI_LOAD_PARMSW;
  1124. #ifdef UNICODE
  1125. typedef MCI_LOAD_PARMSW MCI_LOAD_PARMS;
  1126. typedef PMCI_LOAD_PARMSW PMCI_LOAD_PARMS;
  1127. typedef LPMCI_LOAD_PARMSW LPMCI_LOAD_PARMS;
  1128. #else
  1129. typedef MCI_LOAD_PARMSA MCI_LOAD_PARMS;
  1130. typedef PMCI_LOAD_PARMSA PMCI_LOAD_PARMS;
  1131. typedef LPMCI_LOAD_PARMSA LPMCI_LOAD_PARMS;
  1132. #endif // UNICODE
  1133. #else
  1134. typedef struct tagMCI_LOAD_PARMS {
  1135.     DWORD   dwCallback;
  1136.     LPCSTR  lpfilename;
  1137. } MCI_LOAD_PARMS, FAR * LPMCI_LOAD_PARMS;
  1138. #endif
  1139. /* parameter block for MCI_RECORD command message */
  1140. typedef struct tagMCI_RECORD_PARMS {
  1141.     DWORD_PTR   dwCallback;
  1142.     DWORD       dwFrom;
  1143.     DWORD       dwTo;
  1144. } MCI_RECORD_PARMS, FAR *LPMCI_RECORD_PARMS;
  1145. /* MCI extensions for videodisc devices */
  1146. /* flag for dwReturn field of MCI_STATUS_PARMS */
  1147. /* MCI_STATUS command, (dwItem == MCI_STATUS_MODE) */
  1148. #define MCI_VD_MODE_PARK                (MCI_VD_OFFSET + 1)
  1149. /* flag for dwReturn field of MCI_STATUS_PARMS */
  1150. /* MCI_STATUS command, (dwItem == MCI_VD_STATUS_MEDIA_TYPE) */
  1151. #define MCI_VD_MEDIA_CLV                (MCI_VD_OFFSET + 2)
  1152. #define MCI_VD_MEDIA_CAV                (MCI_VD_OFFSET + 3)
  1153. #define MCI_VD_MEDIA_OTHER              (MCI_VD_OFFSET + 4)
  1154. #define MCI_VD_FORMAT_TRACK             0x4001
  1155. /* flags for dwFlags parameter of MCI_PLAY command message */
  1156. #define MCI_VD_PLAY_REVERSE             0x00010000L
  1157. #define MCI_VD_PLAY_FAST                0x00020000L
  1158. #define MCI_VD_PLAY_SPEED               0x00040000L
  1159. #define MCI_VD_PLAY_SCAN                0x00080000L
  1160. #define MCI_VD_PLAY_SLOW                0x00100000L
  1161. /* flag for dwFlags parameter of MCI_SEEK command message */
  1162. #define MCI_VD_SEEK_REVERSE             0x00010000L
  1163. /* flags for dwItem field of MCI_STATUS_PARMS parameter block */
  1164. #define MCI_VD_STATUS_SPEED             0x00004002L
  1165. #define MCI_VD_STATUS_FORWARD           0x00004003L
  1166. #define MCI_VD_STATUS_MEDIA_TYPE        0x00004004L
  1167. #define MCI_VD_STATUS_SIDE              0x00004005L
  1168. #define MCI_VD_STATUS_DISC_SIZE         0x00004006L
  1169. /* flags for dwFlags parameter of MCI_GETDEVCAPS command message */
  1170. #define MCI_VD_GETDEVCAPS_CLV           0x00010000L
  1171. #define MCI_VD_GETDEVCAPS_CAV           0x00020000L
  1172. #define MCI_VD_SPIN_UP                  0x00010000L
  1173. #define MCI_VD_SPIN_DOWN                0x00020000L
  1174. /* flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block */
  1175. #define MCI_VD_GETDEVCAPS_CAN_REVERSE   0x00004002L
  1176. #define MCI_VD_GETDEVCAPS_FAST_RATE     0x00004003L
  1177. #define MCI_VD_GETDEVCAPS_SLOW_RATE     0x00004004L
  1178. #define MCI_VD_GETDEVCAPS_NORMAL_RATE   0x00004005L
  1179. /* flags for the dwFlags parameter of MCI_STEP command message */
  1180. #define MCI_VD_STEP_FRAMES              0x00010000L
  1181. #define MCI_VD_STEP_REVERSE             0x00020000L
  1182. /* flag for the MCI_ESCAPE command message */
  1183. #define MCI_VD_ESCAPE_STRING            0x00000100L
  1184. /* parameter block for MCI_PLAY command message */
  1185. typedef struct tagMCI_VD_PLAY_PARMS {
  1186.     DWORD_PTR   dwCallback;
  1187.     DWORD       dwFrom;
  1188.     DWORD       dwTo;
  1189.     DWORD       dwSpeed;
  1190. } MCI_VD_PLAY_PARMS, *PMCI_VD_PLAY_PARMS, FAR *LPMCI_VD_PLAY_PARMS;
  1191. /* parameter block for MCI_STEP command message */
  1192. typedef struct tagMCI_VD_STEP_PARMS {
  1193.     DWORD_PTR   dwCallback;
  1194.     DWORD       dwFrames;
  1195. } MCI_VD_STEP_PARMS, *PMCI_VD_STEP_PARMS, FAR *LPMCI_VD_STEP_PARMS;
  1196. /* parameter block for MCI_ESCAPE command message */
  1197. #ifdef _WIN32
  1198. typedef struct tagMCI_VD_ESCAPE_PARMSA {
  1199.     DWORD_PTR   dwCallback;
  1200.     LPCSTR      lpstrCommand;
  1201. } MCI_VD_ESCAPE_PARMSA, *PMCI_VD_ESCAPE_PARMSA, *LPMCI_VD_ESCAPE_PARMSA;
  1202. typedef struct tagMCI_VD_ESCAPE_PARMSW {
  1203.     DWORD_PTR   dwCallback;
  1204.     LPCWSTR     lpstrCommand;
  1205. } MCI_VD_ESCAPE_PARMSW, *PMCI_VD_ESCAPE_PARMSW, *LPMCI_VD_ESCAPE_PARMSW;
  1206. #ifdef UNICODE
  1207. typedef MCI_VD_ESCAPE_PARMSW MCI_VD_ESCAPE_PARMS;
  1208. typedef PMCI_VD_ESCAPE_PARMSW PMCI_VD_ESCAPE_PARMS;
  1209. typedef LPMCI_VD_ESCAPE_PARMSW LPMCI_VD_ESCAPE_PARMS;
  1210. #else
  1211. typedef MCI_VD_ESCAPE_PARMSA MCI_VD_ESCAPE_PARMS;
  1212. typedef PMCI_VD_ESCAPE_PARMSA PMCI_VD_ESCAPE_PARMS;
  1213. typedef LPMCI_VD_ESCAPE_PARMSA LPMCI_VD_ESCAPE_PARMS;
  1214. #endif // UNICODE
  1215. #else
  1216. typedef struct tagMCI_VD_ESCAPE_PARMS {
  1217.     DWORD   dwCallback;
  1218.     LPCSTR  lpstrCommand;
  1219. } MCI_VD_ESCAPE_PARMS, FAR *LPMCI_VD_ESCAPE_PARMS;
  1220. #endif
  1221. /* MCI extensions for CD audio devices */
  1222. /* flags for the dwItem field of the MCI_STATUS_PARMS parameter block */
  1223. #define MCI_CDA_STATUS_TYPE_TRACK       0x00004001L
  1224. /* flags for the dwReturn field of MCI_STATUS_PARMS parameter block */
  1225. /* MCI_STATUS command, (dwItem == MCI_CDA_STATUS_TYPE_TRACK) */
  1226. #define MCI_CDA_TRACK_AUDIO             (MCI_CD_OFFSET + 0)
  1227. #define MCI_CDA_TRACK_OTHER             (MCI_CD_OFFSET + 1)
  1228. /* MCI extensions for waveform audio devices */
  1229. #define MCI_WAVE_PCM                    (MCI_WAVE_OFFSET + 0)
  1230. #define MCI_WAVE_MAPPER                 (MCI_WAVE_OFFSET + 1)
  1231. /* flags for the dwFlags parameter of MCI_OPEN command message */
  1232. #define MCI_WAVE_OPEN_BUFFER            0x00010000L
  1233. /* flags for the dwFlags parameter of MCI_SET command message */
  1234. #define MCI_WAVE_SET_FORMATTAG          0x00010000L
  1235. #define MCI_WAVE_SET_CHANNELS           0x00020000L
  1236. #define MCI_WAVE_SET_SAMPLESPERSEC      0x00040000L
  1237. #define MCI_WAVE_SET_AVGBYTESPERSEC     0x00080000L
  1238. #define MCI_WAVE_SET_BLOCKALIGN         0x00100000L
  1239. #define MCI_WAVE_SET_BITSPERSAMPLE      0x00200000L
  1240. /* flags for the dwFlags parameter of MCI_STATUS, MCI_SET command messages */
  1241. #define MCI_WAVE_INPUT                  0x00400000L
  1242. #define MCI_WAVE_OUTPUT                 0x00800000L
  1243. /* flags for the dwItem field of MCI_STATUS_PARMS parameter block */
  1244. #define MCI_WAVE_STATUS_FORMATTAG       0x00004001L
  1245. #define MCI_WAVE_STATUS_CHANNELS        0x00004002L
  1246. #define MCI_WAVE_STATUS_SAMPLESPERSEC   0x00004003L
  1247. #define MCI_WAVE_STATUS_AVGBYTESPERSEC  0x00004004L
  1248. #define MCI_WAVE_STATUS_BLOCKALIGN      0x00004005L
  1249. #define MCI_WAVE_STATUS_BITSPERSAMPLE   0x00004006L
  1250. #define MCI_WAVE_STATUS_LEVEL           0x00004007L
  1251. /* flags for the dwFlags parameter of MCI_SET command message */
  1252. #define MCI_WAVE_SET_ANYINPUT           0x04000000L
  1253. #define MCI_WAVE_SET_ANYOUTPUT          0x08000000L
  1254. /* flags for the dwFlags parameter of MCI_GETDEVCAPS command message */
  1255. #define MCI_WAVE_GETDEVCAPS_INPUTS      0x00004001L
  1256. #define MCI_WAVE_GETDEVCAPS_OUTPUTS     0x00004002L
  1257. /* parameter block for MCI_OPEN command message */
  1258. #ifdef _WIN32
  1259. typedef struct tagMCI_WAVE_OPEN_PARMSA {
  1260.     DWORD_PTR   dwCallback;
  1261.     MCIDEVICEID wDeviceID;
  1262.     LPCSTR      lpstrDeviceType;
  1263.     LPCSTR      lpstrElementName;
  1264.     LPCSTR      lpstrAlias;
  1265.     DWORD   dwBufferSeconds;
  1266. } MCI_WAVE_OPEN_PARMSA, *PMCI_WAVE_OPEN_PARMSA, *LPMCI_WAVE_OPEN_PARMSA;
  1267. typedef struct tagMCI_WAVE_OPEN_PARMSW {
  1268.     DWORD_PTR   dwCallback;
  1269.     MCIDEVICEID wDeviceID;
  1270.     LPCWSTR     lpstrDeviceType;
  1271.     LPCWSTR     lpstrElementName;
  1272.     LPCWSTR     lpstrAlias;
  1273.     DWORD   dwBufferSeconds;
  1274. } MCI_WAVE_OPEN_PARMSW, *PMCI_WAVE_OPEN_PARMSW, *LPMCI_WAVE_OPEN_PARMSW;
  1275. #ifdef UNICODE
  1276. typedef MCI_WAVE_OPEN_PARMSW MCI_WAVE_OPEN_PARMS;
  1277. typedef PMCI_WAVE_OPEN_PARMSW PMCI_WAVE_OPEN_PARMS;
  1278. typedef LPMCI_WAVE_OPEN_PARMSW LPMCI_WAVE_OPEN_PARMS;
  1279. #else
  1280. typedef MCI_WAVE_OPEN_PARMSA MCI_WAVE_OPEN_PARMS;
  1281. typedef PMCI_WAVE_OPEN_PARMSA PMCI_WAVE_OPEN_PARMS;
  1282. typedef LPMCI_WAVE_OPEN_PARMSA LPMCI_WAVE_OPEN_PARMS;
  1283. #endif // UNICODE
  1284. #else
  1285. typedef struct tagMCI_WAVE_OPEN_PARMS {
  1286.     DWORD   dwCallback;
  1287.     MCIDEVICEID wDeviceID;
  1288.     WORD        wReserved0;
  1289.     LPCSTR      lpstrDeviceType;
  1290.     LPCSTR      lpstrElementName;
  1291.     LPCSTR      lpstrAlias;
  1292.     DWORD       dwBufferSeconds;
  1293. } MCI_WAVE_OPEN_PARMS, FAR *LPMCI_WAVE_OPEN_PARMS;
  1294. #endif
  1295. /* parameter block for MCI_DELETE command message */
  1296. typedef struct tagMCI_WAVE_DELETE_PARMS {
  1297.     DWORD_PTR   dwCallback;
  1298.     DWORD       dwFrom;
  1299.     DWORD       dwTo;
  1300. } MCI_WAVE_DELETE_PARMS, *PMCI_WAVE_DELETE_PARMS, FAR *LPMCI_WAVE_DELETE_PARMS;
  1301. /* parameter block for MCI_SET command message */
  1302. typedef struct tagMCI_WAVE_SET_PARMS {
  1303.     DWORD_PTR   dwCallback;
  1304.     DWORD       dwTimeFormat;
  1305.     DWORD       dwAudio;
  1306. #ifdef _WIN32
  1307.     UINT    wInput;
  1308.     UINT    wOutput;
  1309. #else
  1310.     WORD    wInput;
  1311.     WORD    wReserved0;
  1312.     WORD    wOutput;
  1313.     WORD    wReserved1;
  1314. #endif
  1315.     WORD    wFormatTag;
  1316.     WORD    wReserved2;
  1317.     WORD    nChannels;
  1318.     WORD    wReserved3;
  1319.     DWORD   nSamplesPerSec;
  1320.     DWORD   nAvgBytesPerSec;
  1321.     WORD    nBlockAlign;
  1322.     WORD    wReserved4;
  1323.     WORD    wBitsPerSample;
  1324.     WORD    wReserved5;
  1325. } MCI_WAVE_SET_PARMS, *PMCI_WAVE_SET_PARMS, FAR * LPMCI_WAVE_SET_PARMS;
  1326. /* MCI extensions for MIDI sequencer devices */
  1327. /* flags for the dwReturn field of MCI_STATUS_PARMS parameter block */
  1328. /* MCI_STATUS command, (dwItem == MCI_SEQ_STATUS_DIVTYPE) */
  1329. #define     MCI_SEQ_DIV_PPQN            (0 + MCI_SEQ_OFFSET)
  1330. #define     MCI_SEQ_DIV_SMPTE_24        (1 + MCI_SEQ_OFFSET)
  1331. #define     MCI_SEQ_DIV_SMPTE_25        (2 + MCI_SEQ_OFFSET)
  1332. #define     MCI_SEQ_DIV_SMPTE_30DROP    (3 + MCI_SEQ_OFFSET)
  1333. #define     MCI_SEQ_DIV_SMPTE_30        (4 + MCI_SEQ_OFFSET)
  1334. /* flags for the dwMaster field of MCI_SEQ_SET_PARMS parameter block */
  1335. /* MCI_SET command, (dwFlags == MCI_SEQ_SET_MASTER) */
  1336. #define     MCI_SEQ_FORMAT_SONGPTR      0x4001
  1337. #define     MCI_SEQ_FILE                0x4002
  1338. #define     MCI_SEQ_MIDI                0x4003
  1339. #define     MCI_SEQ_SMPTE               0x4004
  1340. #define     MCI_SEQ_NONE                65533
  1341. #define     MCI_SEQ_MAPPER              65535
  1342. /* flags for the dwItem field of MCI_STATUS_PARMS parameter block */
  1343. #define MCI_SEQ_STATUS_TEMPO            0x00004002L
  1344. #define MCI_SEQ_STATUS_PORT             0x00004003L
  1345. #define MCI_SEQ_STATUS_SLAVE            0x00004007L
  1346. #define MCI_SEQ_STATUS_MASTER           0x00004008L
  1347. #define MCI_SEQ_STATUS_OFFSET           0x00004009L
  1348. #define MCI_SEQ_STATUS_DIVTYPE          0x0000400AL
  1349. #define MCI_SEQ_STATUS_NAME             0x0000400BL
  1350. #define MCI_SEQ_STATUS_COPYRIGHT        0x0000400CL
  1351. /* flags for the dwFlags parameter of MCI_SET command message */
  1352. #define MCI_SEQ_SET_TEMPO               0x00010000L
  1353. #define MCI_SEQ_SET_PORT                0x00020000L
  1354. #define MCI_SEQ_SET_SLAVE               0x00040000L
  1355. #define MCI_SEQ_SET_MASTER              0x00080000L
  1356. #define MCI_SEQ_SET_OFFSET              0x01000000L
  1357. /* parameter block for MCI_SET command message */
  1358. typedef struct tagMCI_SEQ_SET_PARMS {
  1359.     DWORD_PTR   dwCallback;
  1360.     DWORD       dwTimeFormat;
  1361.     DWORD       dwAudio;
  1362.     DWORD       dwTempo;
  1363.     DWORD       dwPort;
  1364.     DWORD       dwSlave;
  1365.     DWORD       dwMaster;
  1366.     DWORD       dwOffset;
  1367. } MCI_SEQ_SET_PARMS, *PMCI_SEQ_SET_PARMS, FAR * LPMCI_SEQ_SET_PARMS;
  1368. /* MCI extensions for animation devices */
  1369. /* flags for dwFlags parameter of MCI_OPEN command message */
  1370. #define MCI_ANIM_OPEN_WS                0x00010000L
  1371. #define MCI_ANIM_OPEN_PARENT            0x00020000L
  1372. #define MCI_ANIM_OPEN_NOSTATIC          0x00040000L
  1373. /* flags for dwFlags parameter of MCI_PLAY command message */
  1374. #define MCI_ANIM_PLAY_SPEED             0x00010000L
  1375. #define MCI_ANIM_PLAY_REVERSE           0x00020000L
  1376. #define MCI_ANIM_PLAY_FAST              0x00040000L
  1377. #define MCI_ANIM_PLAY_SLOW              0x00080000L
  1378. #define MCI_ANIM_PLAY_SCAN              0x00100000L
  1379. /* flags for dwFlags parameter of MCI_STEP command message */
  1380. #define MCI_ANIM_STEP_REVERSE           0x00010000L
  1381. #define MCI_ANIM_STEP_FRAMES            0x00020000L
  1382. /* flags for dwItem field of MCI_STATUS_PARMS parameter block */
  1383. #define MCI_ANIM_STATUS_SPEED           0x00004001L
  1384. #define MCI_ANIM_STATUS_FORWARD         0x00004002L
  1385. #define MCI_ANIM_STATUS_HWND            0x00004003L
  1386. #define MCI_ANIM_STATUS_HPAL            0x00004004L
  1387. #define MCI_ANIM_STATUS_STRETCH         0x00004005L
  1388. /* flags for the dwFlags parameter of MCI_INFO command message */
  1389. #define MCI_ANIM_INFO_TEXT              0x00010000L
  1390. /* flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block */
  1391. #define MCI_ANIM_GETDEVCAPS_CAN_REVERSE 0x00004001L
  1392. #define MCI_ANIM_GETDEVCAPS_FAST_RATE   0x00004002L
  1393. #define MCI_ANIM_GETDEVCAPS_SLOW_RATE   0x00004003L
  1394. #define MCI_ANIM_GETDEVCAPS_NORMAL_RATE 0x00004004L
  1395. #define MCI_ANIM_GETDEVCAPS_PALETTES    0x00004006L
  1396. #define MCI_ANIM_GETDEVCAPS_CAN_STRETCH 0x00004007L
  1397. #define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS 0x00004008L
  1398. /* flags for the MCI_REALIZE command message */
  1399. #define MCI_ANIM_REALIZE_NORM           0x00010000L
  1400. #define MCI_ANIM_REALIZE_BKGD           0x00020000L
  1401. /* flags for dwFlags parameter of MCI_WINDOW command message */
  1402. #define MCI_ANIM_WINDOW_HWND            0x00010000L
  1403. #define MCI_ANIM_WINDOW_STATE           0x00040000L
  1404. #define MCI_ANIM_WINDOW_TEXT            0x00080000L
  1405. #define MCI_ANIM_WINDOW_ENABLE_STRETCH  0x00100000L
  1406. #define MCI_ANIM_WINDOW_DISABLE_STRETCH 0x00200000L
  1407. /* flags for hWnd field of MCI_ANIM_WINDOW_PARMS parameter block */
  1408. /* MCI_WINDOW command message, (dwFlags == MCI_ANIM_WINDOW_HWND) */
  1409. #define MCI_ANIM_WINDOW_DEFAULT         0x00000000L
  1410. /* flags for dwFlags parameter of MCI_PUT command message */
  1411. #define MCI_ANIM_RECT                   0x00010000L
  1412. #define MCI_ANIM_PUT_SOURCE             0x00020000L
  1413. #define MCI_ANIM_PUT_DESTINATION        0x00040000L
  1414. /* flags for dwFlags parameter of MCI_WHERE command message */
  1415. #define MCI_ANIM_WHERE_SOURCE           0x00020000L
  1416. #define MCI_ANIM_WHERE_DESTINATION      0x00040000L
  1417. /* flags for dwFlags parameter of MCI_UPDATE command message */
  1418. #define MCI_ANIM_UPDATE_HDC             0x00020000L
  1419. /* parameter block for MCI_OPEN command message */
  1420. #ifdef _WIN32
  1421. typedef struct tagMCI_ANIM_OPEN_PARMSA {
  1422.     DWORD_PTR   dwCallback;
  1423.     MCIDEVICEID wDeviceID;
  1424.     LPCSTR      lpstrDeviceType;
  1425.     LPCSTR      lpstrElementName;
  1426.     LPCSTR      lpstrAlias;
  1427.     DWORD   dwStyle;
  1428.     HWND    hWndParent;
  1429. } MCI_ANIM_OPEN_PARMSA, *PMCI_ANIM_OPEN_PARMSA, *LPMCI_ANIM_OPEN_PARMSA;
  1430. typedef struct tagMCI_ANIM_OPEN_PARMSW {
  1431.     DWORD_PTR   dwCallback;
  1432.     MCIDEVICEID wDeviceID;
  1433.     LPCWSTR     lpstrDeviceType;
  1434.     LPCWSTR     lpstrElementName;
  1435.     LPCWSTR     lpstrAlias;
  1436.     DWORD   dwStyle;
  1437.     HWND    hWndParent;
  1438. } MCI_ANIM_OPEN_PARMSW, *PMCI_ANIM_OPEN_PARMSW, *LPMCI_ANIM_OPEN_PARMSW;
  1439. #ifdef UNICODE
  1440. typedef MCI_ANIM_OPEN_PARMSW MCI_ANIM_OPEN_PARMS;
  1441. typedef PMCI_ANIM_OPEN_PARMSW PMCI_ANIM_OPEN_PARMS;
  1442. typedef LPMCI_ANIM_OPEN_PARMSW LPMCI_ANIM_OPEN_PARMS;
  1443. #else
  1444. typedef MCI_ANIM_OPEN_PARMSA MCI_ANIM_OPEN_PARMS;
  1445. typedef PMCI_ANIM_OPEN_PARMSA PMCI_ANIM_OPEN_PARMS;
  1446. typedef LPMCI_ANIM_OPEN_PARMSA LPMCI_ANIM_OPEN_PARMS;
  1447. #endif // UNICODE
  1448. #else
  1449. typedef struct tagMCI_ANIM_OPEN_PARMS {
  1450.     DWORD   dwCallback;
  1451.     MCIDEVICEID wDeviceID;
  1452.     WORD        wReserved0;
  1453.     LPCSTR      lpstrDeviceType;
  1454.     LPCSTR      lpstrElementName;
  1455.     LPCSTR      lpstrAlias;
  1456.     DWORD       dwStyle;
  1457.     HWND        hWndParent;
  1458.     WORD        wReserved1;
  1459. } MCI_ANIM_OPEN_PARMS, FAR *LPMCI_ANIM_OPEN_PARMS;
  1460. #endif
  1461. /* parameter block for MCI_PLAY command message */
  1462. typedef struct tagMCI_ANIM_PLAY_PARMS {
  1463.     DWORD_PTR   dwCallback;
  1464.     DWORD       dwFrom;
  1465.     DWORD       dwTo;
  1466.     DWORD       dwSpeed;
  1467. } MCI_ANIM_PLAY_PARMS, *PMCI_ANIM_PLAY_PARMS, FAR *LPMCI_ANIM_PLAY_PARMS;
  1468. /* parameter block for MCI_STEP command message */
  1469. typedef struct tagMCI_ANIM_STEP_PARMS {
  1470.     DWORD_PTR   dwCallback;
  1471.     DWORD       dwFrames;
  1472. } MCI_ANIM_STEP_PARMS, *PMCI_ANIM_STEP_PARMS, FAR *LPMCI_ANIM_STEP_PARMS;
  1473. /* parameter block for MCI_WINDOW command message */
  1474. #ifdef _WIN32
  1475. typedef struct tagMCI_ANIM_WINDOW_PARMSA {
  1476.     DWORD_PTR   dwCallback;
  1477.     HWND        hWnd;
  1478.     UINT        nCmdShow;
  1479.     LPCSTR     lpstrText;
  1480. } MCI_ANIM_WINDOW_PARMSA, *PMCI_ANIM_WINDOW_PARMSA, * LPMCI_ANIM_WINDOW_PARMSA;
  1481. typedef struct tagMCI_ANIM_WINDOW_PARMSW {
  1482.     DWORD_PTR   dwCallback;
  1483.     HWND        hWnd;
  1484.     UINT        nCmdShow;
  1485.     LPCWSTR    lpstrText;
  1486. } MCI_ANIM_WINDOW_PARMSW, *PMCI_ANIM_WINDOW_PARMSW, * LPMCI_ANIM_WINDOW_PARMSW;
  1487. #ifdef UNICODE
  1488. typedef MCI_ANIM_WINDOW_PARMSW MCI_ANIM_WINDOW_PARMS;
  1489. typedef PMCI_ANIM_WINDOW_PARMSW PMCI_ANIM_WINDOW_PARMS;
  1490. typedef LPMCI_ANIM_WINDOW_PARMSW LPMCI_ANIM_WINDOW_PARMS;
  1491. #else
  1492. typedef MCI_ANIM_WINDOW_PARMSA MCI_ANIM_WINDOW_PARMS;
  1493. typedef PMCI_ANIM_WINDOW_PARMSA PMCI_ANIM_WINDOW_PARMS;
  1494. typedef LPMCI_ANIM_WINDOW_PARMSA LPMCI_ANIM_WINDOW_PARMS;
  1495. #endif // UNICODE
  1496. #else
  1497. typedef struct tagMCI_ANIM_WINDOW_PARMS {
  1498.     DWORD   dwCallback;
  1499.     HWND    hWnd;
  1500.     WORD    wReserved1;
  1501.     WORD    nCmdShow;
  1502.     WORD    wReserved2;
  1503.     LPCSTR  lpstrText;
  1504. } MCI_ANIM_WINDOW_PARMS, FAR * LPMCI_ANIM_WINDOW_PARMS;
  1505. #endif
  1506. /* parameter block for MCI_PUT, MCI_UPDATE, MCI_WHERE command messages */
  1507. typedef struct tagMCI_ANIM_RECT_PARMS {
  1508.     DWORD_PTR   dwCallback;
  1509. #ifdef MCI_USE_OFFEXT
  1510.     POINT   ptOffset;
  1511.     POINT   ptExtent;
  1512. #else   /* ifdef MCI_USE_OFFEXT */
  1513.     RECT    rc;
  1514. #endif  /* ifdef MCI_USE_OFFEXT */
  1515. } MCI_ANIM_RECT_PARMS;
  1516. typedef MCI_ANIM_RECT_PARMS * PMCI_ANIM_RECT_PARMS;
  1517. typedef MCI_ANIM_RECT_PARMS FAR * LPMCI_ANIM_RECT_PARMS;
  1518. /* parameter block for MCI_UPDATE PARMS */
  1519. typedef struct tagMCI_ANIM_UPDATE_PARMS {
  1520.     DWORD_PTR   dwCallback;
  1521.     RECT        rc;
  1522.     HDC         hDC;
  1523. } MCI_ANIM_UPDATE_PARMS, *PMCI_ANIM_UPDATE_PARMS, FAR * LPMCI_ANIM_UPDATE_PARMS;
  1524. /* MCI extensions for video overlay devices */
  1525. /* flags for dwFlags parameter of MCI_OPEN command message */
  1526. #define MCI_OVLY_OPEN_WS                0x00010000L
  1527. #define MCI_OVLY_OPEN_PARENT            0x00020000L
  1528. /* flags for dwFlags parameter of MCI_STATUS command message */
  1529. #define MCI_OVLY_STATUS_HWND            0x00004001L
  1530. #define MCI_OVLY_STATUS_STRETCH         0x00004002L
  1531. /* flags for dwFlags parameter of MCI_INFO command message */
  1532. #define MCI_OVLY_INFO_TEXT              0x00010000L
  1533. /* flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block */
  1534. #define MCI_OVLY_GETDEVCAPS_CAN_STRETCH 0x00004001L
  1535. #define MCI_OVLY_GETDEVCAPS_CAN_FREEZE  0x00004002L
  1536. #define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS 0x00004003L
  1537. /* flags for dwFlags parameter of MCI_WINDOW command message */
  1538. #define MCI_OVLY_WINDOW_HWND            0x00010000L
  1539. #define MCI_OVLY_WINDOW_STATE           0x00040000L
  1540. #define MCI_OVLY_WINDOW_TEXT            0x00080000L
  1541. #define MCI_OVLY_WINDOW_ENABLE_STRETCH  0x00100000L
  1542. #define MCI_OVLY_WINDOW_DISABLE_STRETCH 0x00200000L
  1543. /* flags for hWnd parameter of MCI_OVLY_WINDOW_PARMS parameter block */
  1544. #define MCI_OVLY_WINDOW_DEFAULT         0x00000000L
  1545. /* flags for dwFlags parameter of MCI_PUT command message */
  1546. #define MCI_OVLY_RECT                   0x00010000L
  1547. #define MCI_OVLY_PUT_SOURCE             0x00020000L
  1548. #define MCI_OVLY_PUT_DESTINATION        0x00040000L
  1549. #define MCI_OVLY_PUT_FRAME              0x00080000L
  1550. #define MCI_OVLY_PUT_VIDEO              0x00100000L
  1551. /* flags for dwFlags parameter of MCI_WHERE command message */
  1552. #define MCI_OVLY_WHERE_SOURCE           0x00020000L
  1553. #define MCI_OVLY_WHERE_DESTINATION      0x00040000L
  1554. #define MCI_OVLY_WHERE_FRAME            0x00080000L
  1555. #define MCI_OVLY_WHERE_VIDEO            0x00100000L
  1556. /* parameter block for MCI_OPEN command message */
  1557. #ifdef _WIN32
  1558. typedef struct tagMCI_OVLY_OPEN_PARMSA {
  1559.     DWORD_PTR   dwCallback;
  1560.     MCIDEVICEID wDeviceID;
  1561.     LPCSTR      lpstrDeviceType;
  1562.     LPCSTR      lpstrElementName;
  1563.     LPCSTR      lpstrAlias;
  1564.     DWORD   dwStyle;
  1565.     HWND    hWndParent;
  1566. } MCI_OVLY_OPEN_PARMSA, *PMCI_OVLY_OPEN_PARMSA, *LPMCI_OVLY_OPEN_PARMSA;
  1567. typedef struct tagMCI_OVLY_OPEN_PARMSW {
  1568.     DWORD_PTR   dwCallback;
  1569.     MCIDEVICEID wDeviceID;
  1570.     LPCWSTR     lpstrDeviceType;
  1571.     LPCWSTR     lpstrElementName;
  1572.     LPCWSTR     lpstrAlias;
  1573.     DWORD   dwStyle;
  1574.     HWND    hWndParent;
  1575. } MCI_OVLY_OPEN_PARMSW, *PMCI_OVLY_OPEN_PARMSW, *LPMCI_OVLY_OPEN_PARMSW;
  1576. #ifdef UNICODE
  1577. typedef MCI_OVLY_OPEN_PARMSW MCI_OVLY_OPEN_PARMS;
  1578. typedef PMCI_OVLY_OPEN_PARMSW PMCI_OVLY_OPEN_PARMS;
  1579. typedef LPMCI_OVLY_OPEN_PARMSW LPMCI_OVLY_OPEN_PARMS;
  1580. #else
  1581. typedef MCI_OVLY_OPEN_PARMSA MCI_OVLY_OPEN_PARMS;
  1582. typedef PMCI_OVLY_OPEN_PARMSA PMCI_OVLY_OPEN_PARMS;
  1583. typedef LPMCI_OVLY_OPEN_PARMSA LPMCI_OVLY_OPEN_PARMS;
  1584. #endif // UNICODE
  1585. #else
  1586. typedef struct tagMCI_OVLY_OPEN_PARMS {
  1587.     DWORD   dwCallback;
  1588.     MCIDEVICEID wDeviceID;
  1589.     WORD        wReserved0;
  1590.     LPCSTR      lpstrDeviceType;
  1591.     LPCSTR      lpstrElementName;
  1592.     LPCSTR      lpstrAlias;
  1593.     DWORD       dwStyle;
  1594.     HWND        hWndParent;
  1595.     WORD        wReserved1;
  1596. } MCI_OVLY_OPEN_PARMS, FAR *LPMCI_OVLY_OPEN_PARMS;
  1597. #endif
  1598. /* parameter block for MCI_WINDOW command message */
  1599. #ifdef _WIN32
  1600. typedef struct tagMCI_OVLY_WINDOW_PARMSA {
  1601.     DWORD_PTR   dwCallback;
  1602.     HWND        hWnd;
  1603.     UINT        nCmdShow;
  1604.     LPCSTR      lpstrText;
  1605. } MCI_OVLY_WINDOW_PARMSA, *PMCI_OVLY_WINDOW_PARMSA, * LPMCI_OVLY_WINDOW_PARMSA;
  1606. typedef struct tagMCI_OVLY_WINDOW_PARMSW {
  1607.     DWORD_PTR   dwCallback;
  1608.     HWND        hWnd;
  1609.     UINT        nCmdShow;
  1610.     LPCWSTR     lpstrText;
  1611. } MCI_OVLY_WINDOW_PARMSW, *PMCI_OVLY_WINDOW_PARMSW, * LPMCI_OVLY_WINDOW_PARMSW;
  1612. #ifdef UNICODE
  1613. typedef MCI_OVLY_WINDOW_PARMSW MCI_OVLY_WINDOW_PARMS;
  1614. typedef PMCI_OVLY_WINDOW_PARMSW PMCI_OVLY_WINDOW_PARMS;
  1615. typedef LPMCI_OVLY_WINDOW_PARMSW LPMCI_OVLY_WINDOW_PARMS;
  1616. #else
  1617. typedef MCI_OVLY_WINDOW_PARMSA MCI_OVLY_WINDOW_PARMS;
  1618. typedef PMCI_OVLY_WINDOW_PARMSA PMCI_OVLY_WINDOW_PARMS;
  1619. typedef LPMCI_OVLY_WINDOW_PARMSA LPMCI_OVLY_WINDOW_PARMS;
  1620. #endif // UNICODE
  1621. #else
  1622. typedef struct tagMCI_OVLY_WINDOW_PARMS {
  1623.     DWORD   dwCallback;
  1624.     HWND    hWnd;
  1625.     WORD    wReserved1;
  1626.     UINT    nCmdShow;
  1627.     WORD    wReserved2;
  1628.     LPCSTR  lpstrText;
  1629. } MCI_OVLY_WINDOW_PARMS, FAR * LPMCI_OVLY_WINDOW_PARMS;
  1630. #endif
  1631. /* parameter block for MCI_PUT, MCI_UPDATE, and MCI_WHERE command messages */
  1632. typedef struct tagMCI_OVLY_RECT_PARMS {
  1633.     DWORD_PTR   dwCallback;
  1634. #ifdef MCI_USE_OFFEXT
  1635.     POINT   ptOffset;
  1636.     POINT   ptExtent;
  1637. #else   /* ifdef MCI_USE_OFFEXT */
  1638.     RECT    rc;
  1639. #endif  /* ifdef MCI_USE_OFFEXT */
  1640. } MCI_OVLY_RECT_PARMS, *PMCI_OVLY_RECT_PARMS, FAR * LPMCI_OVLY_RECT_PARMS;
  1641. /* parameter block for MCI_SAVE command message */
  1642. #ifdef _WIN32
  1643. typedef struct tagMCI_OVLY_SAVE_PARMSA {
  1644.     DWORD_PTR   dwCallback;
  1645.     LPCSTR      lpfilename;
  1646.     RECT        rc;
  1647. } MCI_OVLY_SAVE_PARMSA, *PMCI_OVLY_SAVE_PARMSA, * LPMCI_OVLY_SAVE_PARMSA;
  1648. typedef struct tagMCI_OVLY_SAVE_PARMSW {
  1649.     DWORD_PTR   dwCallback;
  1650.     LPCWSTR     lpfilename;
  1651.     RECT        rc;
  1652. } MCI_OVLY_SAVE_PARMSW, *PMCI_OVLY_SAVE_PARMSW, * LPMCI_OVLY_SAVE_PARMSW;
  1653. #ifdef UNICODE
  1654. typedef MCI_OVLY_SAVE_PARMSW MCI_OVLY_SAVE_PARMS;
  1655. typedef PMCI_OVLY_SAVE_PARMSW PMCI_OVLY_SAVE_PARMS;
  1656. typedef LPMCI_OVLY_SAVE_PARMSW LPMCI_OVLY_SAVE_PARMS;
  1657. #else
  1658. typedef MCI_OVLY_SAVE_PARMSA MCI_OVLY_SAVE_PARMS;
  1659. typedef PMCI_OVLY_SAVE_PARMSA PMCI_OVLY_SAVE_PARMS;
  1660. typedef LPMCI_OVLY_SAVE_PARMSA LPMCI_OVLY_SAVE_PARMS;
  1661. #endif // UNICODE
  1662. #else
  1663. typedef struct tagMCI_OVLY_SAVE_PARMS {
  1664.     DWORD   dwCallback;
  1665.     LPCSTR  lpfilename;
  1666.     RECT    rc;
  1667. } MCI_OVLY_SAVE_PARMS, FAR * LPMCI_OVLY_SAVE_PARMS;
  1668. #endif
  1669. /* parameter block for MCI_LOAD command message */
  1670. #ifdef _WIN32
  1671. typedef struct tagMCI_OVLY_LOAD_PARMSA {
  1672.     DWORD_PTR   dwCallback;
  1673.     LPCSTR      lpfilename;
  1674.     RECT    rc;
  1675. } MCI_OVLY_LOAD_PARMSA, *PMCI_OVLY_LOAD_PARMSA, * LPMCI_OVLY_LOAD_PARMSA;
  1676. typedef struct tagMCI_OVLY_LOAD_PARMSW {
  1677.     DWORD_PTR   dwCallback;
  1678.     LPCWSTR     lpfilename;
  1679.     RECT    rc;
  1680. } MCI_OVLY_LOAD_PARMSW, *PMCI_OVLY_LOAD_PARMSW, * LPMCI_OVLY_LOAD_PARMSW;
  1681. #ifdef UNICODE
  1682. typedef MCI_OVLY_LOAD_PARMSW MCI_OVLY_LOAD_PARMS;
  1683. typedef PMCI_OVLY_LOAD_PARMSW PMCI_OVLY_LOAD_PARMS;
  1684. typedef LPMCI_OVLY_LOAD_PARMSW LPMCI_OVLY_LOAD_PARMS;
  1685. #else
  1686. typedef MCI_OVLY_LOAD_PARMSA MCI_OVLY_LOAD_PARMS;
  1687. typedef PMCI_OVLY_LOAD_PARMSA PMCI_OVLY_LOAD_PARMS;
  1688. typedef LPMCI_OVLY_LOAD_PARMSA LPMCI_OVLY_LOAD_PARMS;
  1689. #endif // UNICODE
  1690. #else
  1691. typedef struct tagMCI_OVLY_LOAD_PARMS {
  1692.     DWORD   dwCallback;
  1693.     LPCSTR  lpfilename;
  1694.     RECT    rc;
  1695. } MCI_OVLY_LOAD_PARMS, FAR * LPMCI_OVLY_LOAD_PARMS;
  1696. #endif
  1697. #endif  /* ifndef MMNOMCI */
  1698. /****************************************************************************
  1699.                         DISPLAY Driver extensions
  1700. ****************************************************************************/
  1701. #ifndef NEWTRANSPARENT
  1702.     #define NEWTRANSPARENT  3           /* use with SetBkMode() */
  1703.     #define QUERYROPSUPPORT 40          /* use to determine ROP support */
  1704. #endif  /* ifndef NEWTRANSPARENT */
  1705. /****************************************************************************
  1706.                         DIB Driver extensions
  1707. ****************************************************************************/
  1708. #define SELECTDIB       41                      /* DIB.DRV select dib escape */
  1709. #define DIBINDEX(n)     MAKELONG((n),0x10FF)
  1710. /****************************************************************************
  1711.                         ScreenSaver support
  1712.     The current application will receive a syscommand of SC_SCREENSAVE just
  1713.     before the screen saver is invoked.  If the app wishes to prevent a
  1714.     screen save, return non-zero value, otherwise call DefWindowProc().
  1715. ****************************************************************************/
  1716. #ifndef SC_SCREENSAVE
  1717.     #define SC_SCREENSAVE   0xF140
  1718. #endif  /* ifndef SC_SCREENSAVE */
  1719. #ifdef __cplusplus
  1720. }                       /* End of extern "C" { */
  1721. #endif  /* __cplusplus */
  1722. #ifdef _WIN32
  1723. #include <poppack.h>
  1724. #else
  1725. #ifndef RC_INVOKED
  1726. #pragma pack()
  1727. #endif
  1728. #endif
  1729. #endif  /* _INC_MMSYSTEM */