Для начала определим вспомогательные переменные и функции, которые облегчат передачу команд: #include <mmsystem.h> #include <stdio.h> #pragma comment(lib,"winmm.lib")
/* Команды */ char * CdCmdSet = "set"; char * CdCmdStatus = "status"; char * CdCmdPlay = "play"; char * CdCmdPause = "pause"; char * CdCmdStop = "stop"; char * CdCmdResume = "resume";
/* Флаги команд */ char * CdCmdFlagOpen = "door open"; char * CdCmdFlagClose = "door closed"; char * CdCmdCurTrack = "current track"; char * CdCmdCurMode = "mode"; char * CdCmdFlagEmpty = "";
/* Флаги выполнения */ char * CdFlagWait = "wait"; char * CdFlagEmpty = "";
/* Буфер, в котором будем создавать команды */ char CdCommandBuffer[256];
/* Создание команды без указания имени CD-ROM'а */ char * CreateCdCommand(char * pBuffer, char * pCommand, char * pCmdFlags, char * pFlags) { sprintf(pBuffer,"%s cdaudio %s %s",pCommand,pCmdFlags,pFlags); return pBuffer; }
/* Создание команды с указанием имени CD-ROM'а */ char * CreateCdCommandEx(char * pBuffer, char DriveLetter, char * pCommand, char * pCmdFlags, char * pFlags) { sprintf(pBuffer,"%s cdaudio!%c: %s %s",pCommand,DriveLetter,pCmdFlags,pFlags); return pBuffer; } Теперь, используя вспомогательные функции и переменные, отдавать команды управления CD-ROM'ом не просто, а очень просто. - Открыть CD-ROM, ожидая выполнения этой команды:
mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdSet,CdCmdFlagOpen,CdFlagWait), NULL, 0, INVALID_HANDLE_VALUE); - Закрыть CD_ROM, ожидая выполнения этой команды:
mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdSet,CdCmdFlagClose,CdFlagWait), NULL, 0, INVALID_HANDLE_VALUE); - Начать воспроизведение без ожидания выполнения:
mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdPlay,CdCmdFlagEmpty,CdFlagEmpty), NULL, 0, INVALID_HANDLE_VALUE); - Приостановить воспроизведение(пауза) без ожидания выполнения:
mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdPause,CdCmdFlagEmpty,CdFlagEmpty), NULL, 0, INVALID_HANDLE_VALUE); - Возобновить воспроизведение без ожидания выполнения:
mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdResume,CdCmdFlagEmpty,CdFlagEmpty), NULL, 0, INVALID_HANDLE_VALUE); - Остановить воспроизведение(стоп) без ожидания выполнения:
mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdStop,CdCmdFlagEmpty,CdFlagEmpty), NULL, 0, INVALID_HANDLE_VALUE); - Получить номер текущей дорожки, ожидая выполнения этой команды:
mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdStatus,CdCmdCurTrack,CdFlagWait), CdCommandBuffer, 255, INVALID_HANDLE_VALUE); ShowMessage("Current track is "+AnsiString(CdCommandBuffer));
- Получить текущее состояние, ожидая выполнения этой команды:
mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdStatus,CdCmdCurMode,CdFlagWait), CdCommandBuffer, 255, INVALID_HANDLE_VALUE); ShowMessage("Current mode is \'"+AnsiString(CdCommandBuffer)+"\'");
Если в системе присутствует несколько приводов CD, то для задания конкретного привода вместо функции CreateCdCommand следует использовать CreateCdCommandEx |