// ----------------------------------------
// Использование функций
// MessageBeep и sndPlaySound
// ----------------------------------------
#define STRICT
#include <windows.h>
#include <mmsystem.h>

#pragma argsused
int PASCAL
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
        LPSTR lpszCmdLine, int nCmdShow)
{
   HANDLE hWaveRes, hRes;
   LPSTR lpRes;
   BOOL rc;
   HFILE hf;
   DWORD dwFileSize;
   HGLOBAL hWave;
   char huge *lpBuf;

   // Проигрываем звук, соответствующий строке
   // SystemQuestion раздела [sound] файла win.ini
   MessageBeep(MB_ICONQUESTION);

   MessageBox(NULL, "Начнем, что ли?",
     "SndPlay", MB_OK | MB_ICONQUESTION);

   // Проигрываем файл sndplay.snd в синхронном режиме
   rc = sndPlaySound((LPSTR)"sndplay.wav", SND_SYNC);
   if(!rc)
   {
     MessageBeep(MB_ICONHAND);
     MessageBox(NULL, "Не могу проиграть файл sndplay.wav",
       "SndPlay", MB_OK | MB_ICONHAND);
     return -1;
   }

   // Загружаем звуковой фрагмент из ресурсов приложения
   // и проигрываем его

   // Находим нужный ресурс
   hWaveRes = FindResource(hInstance, "APP_SOUND", "WAVE");
   if(hWaveRes)
   {
     // Загружаем ресурс в память
     hRes = LoadResource(hInstance, (HRSRC)hWaveRes);
     if(hRes)
     {
       // Фиксируем ресурс в памяти, получая
       // указатель на данные
       lpRes = (LPSTR)LockResource(hRes);
       if(lpRes)
       {
         // Проигрываем звук в цикле
         rc = sndPlaySound(lpRes, SND_MEMORY | SND_ASYNC | SND_LOOP);

         MessageBox(NULL,
           "Для завершения нажмите кнопку OK",
           "SndPlay", MB_OK | MB_ICONINFORMATION);

         // Останавливаем проигрывание
         sndPlaySound(NULL, 0);

         // Расфиксируем и освобождаем ресурс
         UnlockResource(hRes);
         FreeResource(hRes);

         // Загружаем звуковой фрагмент непосредственно из
         // wav-файла в память и проигрываем его

         // Открываем wav-файл
         hf = _lopen((LPSTR)"uff.wav", OF_READ);

         // Определяем размер файла
         dwFileSize = _llseek(hf, 0l, 2);
         _llseek(hf, 0l, 0);

         // Заказываем глобальный блок памяти,
         // размер которого равен длине файла
         hWave = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, dwFileSize);

         // Фиксируем блок памяти
         lpBuf = (char huge *)GlobalLock(hWave);
         if(lpBuf != NULL)
         {
           // Читаем файл в полученный блок памяти
           _hread(hf, lpBuf, dwFileSize);

           // Проигрываем звуковой фрагмент, загруженный в память
           rc = sndPlaySound((LPCSTR)lpBuf, SND_MEMORY | SND_SYNC);
           if(!rc)
           {
             MessageBeep(MB_ICONHAND);
             MessageBox(NULL, "Не могу проиграть файл uff.wav",
               "SndPlay", MB_OK | MB_ICONHAND);
           }

           // Расфиксируем и освобождаем память
           GlobalUnlock(hWave);
           GlobalFree(hWave);

           // Закрываем файл
           _lclose(hf);
         }
       }
     }
   }
   return 0;
}