C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как программно управлять CD-ROM-ом / Система (OC) / Borland C++

Как программно управлять CD-ROM'ом?

Автор: trainer
Исходная ссылка: - - -

Для начала определим вспомогательные переменные и функции, которые облегчат передачу команд:
#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'ом не просто, а очень просто.
  1. Открыть CD-ROM, ожидая выполнения этой команды:
    mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdSet,CdCmdFlagOpen,CdFlagWait),
    		NULL,
    		0,
    		INVALID_HANDLE_VALUE);
  2. Закрыть CD_ROM, ожидая выполнения этой команды:
    mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdSet,CdCmdFlagClose,CdFlagWait),
    		NULL,
    		0,
    		INVALID_HANDLE_VALUE);
  3. Начать воспроизведение без ожидания выполнения:
    mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdPlay,CdCmdFlagEmpty,CdFlagEmpty),
    		NULL,
    		0,
    		INVALID_HANDLE_VALUE);
  4. Приостановить воспроизведение(пауза) без ожидания выполнения:
    mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdPause,CdCmdFlagEmpty,CdFlagEmpty),
    		NULL,
    		0,
    		INVALID_HANDLE_VALUE);
  5. Возобновить воспроизведение без ожидания выполнения:
    mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdResume,CdCmdFlagEmpty,CdFlagEmpty),
    		NULL,
    		0,
    		INVALID_HANDLE_VALUE);
  6. Остановить воспроизведение(стоп) без ожидания выполнения:
    mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdStop,CdCmdFlagEmpty,CdFlagEmpty),
    		NULL,
    		0,
    		INVALID_HANDLE_VALUE);
  7. Получить номер текущей дорожки, ожидая выполнения этой команды:
    mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdStatus,CdCmdCurTrack,CdFlagWait),
    		CdCommandBuffer,
    		255,
    		INVALID_HANDLE_VALUE);
    ShowMessage("Current track is "+AnsiString(CdCommandBuffer));
    
  8. Получить текущее состояние, ожидая выполнения этой команды:
    mciSendStringA(CreateCdCommand(CdCommandBuffer,CdCmdStatus,CdCmdCurMode,CdFlagWait),
    		CdCommandBuffer,
    		255,
    		INVALID_HANDLE_VALUE);
    ShowMessage("Current mode is \'"+AnsiString(CdCommandBuffer)+"\'");
    
Если в системе присутствует несколько приводов CD, то для задания конкретного привода вместо функции CreateCdCommand следует использовать CreateCdCommandEx