Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

Как программно управлять 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


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS