// -----------------------------------------------------
// Приложение MCISTRVW
// Демонстрирует использование командных строк MCI
// -----------------------------------------------------
#define STRICT
#include <windows.h>
#include <mmsystem.h>

void mciwioError(DWORD dwrc);

#pragma argsused
int PASCAL
WinMain(HINSTANCE hInstance, 
	HINSTANCE hPrevInstance,
	LPSTR     lpszCmdLine, 
	int       nCmdShow)
{
  DWORD dwrc;
  BYTE szBuf[256], szBuf1[256];

  // Открываем файл kaas.wav
  dwrc = mciSendString(
    (LPSTR)"open kaas.wav type waveaudio alias patr wait",
    (LPSTR)szBuf, 256, NULL);
  if(dwrc) mciwioError(dwrc);

  // Получаем имя устройства, под которым оно установлено
  // в файле system.ini
  dwrc = mciSendString((LPSTR)"sysinfo patr installname wait",
    (LPSTR)szBuf, 256, NULL);
  if(dwrc) mciwioError(dwrc);

  lstrcat(szBuf, (LPSTR)"\n");

  // Добавляем к нему текстовое описание аппаратуры
  dwrc = mciSendString((LPSTR)"info patr product wait",
    (LPSTR)szBuf1, 256, NULL);
  if(dwrc) mciwioError(dwrc);
  lstrcat(szBuf, szBuf1);

  // Выводим на экран полученную информацию об устройстве
  MessageBox(NULL, szBuf, "MCISTRWV", MB_ICONINFORMATION);

  // Запускаем проигрывание в синхронном режиме
  dwrc = mciSendString((LPSTR)"play patr wait",
    (LPSTR)szBuf, 256, NULL);
  if(dwrc) mciwioError(dwrc);

  // После завершения проигрывания закрываем устройство 
  dwrc = mciSendString((LPSTR)"close patr",
    (LPSTR)szBuf, 256, NULL);
  if(dwrc) mciwioError(dwrc);

  return 0;
}

// -----------------------------------------------------
// Функция mciwioError
// Выводит текстовое описание ошибки
// -----------------------------------------------------
void mciwioError(DWORD dwrc)
{
  BYTE szBuf[MAXERRORLENGTH];

  // Если коду ошибки, переданному через параметр dwrc
  // соответствует текстовое описание, выводим его на экран 
  if(mciGetErrorString(dwrc, (LPSTR)szBuf, MAXERRORLENGTH))
    MessageBox(NULL, szBuf, "MCISTRVW Error",
      MB_ICONEXCLAMATION);

  // В противном случае выводим сообщение о том, что это
  // неизвестная ошибка
  else
    MessageBox(NULL, "Неизвестная ошибка", "MCISTRVW Error",
      MB_ICONEXCLAMATION);
}
