Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2008, 12:29   #1
Cricket2007
Пользователь
 
Регистрация: 12.02.2008
Сообщений: 14
По умолчанию управление CD ROMom

Всем привет! Я нашел вот такой код

#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(CdCo mmandBuffer,CdCmdSet,CdCmdFlagOpen, CdFlagWait),
NULL,
0,
INVALID_HANDLE_VALUE);
Закрыть CD_ROM, ожидая выполнения этой команды:
mciSendStringA(CreateCdCommand(CdCo mmandBuffer,CdCmdSet,CdCmdFlagClose ,CdFlagWait),
NULL,
0,
INVALID_HANDLE_VALUE);
Начать воспроизведение без ожидания выполнения:
mciSendStringA(CreateCdCommand(CdCo mmandBuffer,CdCmdPlay,CdCmdFlagEmpt y,CdFlagEmpty),
NULL,
0,
INVALID_HANDLE_VALUE);
Приостановить воспроизведение(пауза) без ожидания выполнения:
mciSendStringA(CreateCdCommand(CdCo mmandBuffer,CdCmdPause,CdCmdFlagEmp ty,CdFlagEmpty),
NULL,
0,
INVALID_HANDLE_VALUE);
Возобновить воспроизведение без ожидания выполнения:
mciSendStringA(CreateCdCommand(CdCo mmandBuffer,CdCmdResume,CdCmdFlagEm pty,CdFlagEmpty),
NULL,
0,
INVALID_HANDLE_VALUE);
Остановить воспроизведение(стоп) без ожидания выполнения:
mciSendStringA(CreateCdCommand(CdCo mmandBuffer,CdCmdStop,CdCmdFlagEmpt y,CdFlagEmpty),
NULL,
0,
INVALID_HANDLE_VALUE);
Получить номер текущей дорожки, ожидая выполнения этой команды:
mciSendStringA(CreateCdCommand(CdCo mmandBuffer,CdCmdStatus,CdCmdCurTra ck,CdFlagWait),
CdCommandBuffer,
255,
INVALID_HANDLE_VALUE);
ShowMessage("Current track is "+AnsiString(CdCommandBuffer));
Получить текущее состояние, ожидая выполнения этой команды:
mciSendStringA(CreateCdCommand(CdCo mmandBuffer,CdCmdStatus,CdCmdCurMod e,CdFlagWait),
CdCommandBuffer,
255,
INVALID_HANDLE_VALUE);
ShowMessage("Current mode is \'"+AnsiString(CdCommandBuffer)+"\' ");
Если в системе присутствует несколько приводов CD, то для задания конкретного привода вместо функции CreateCdCommand следует использовать CreateCdCommandEx

запустил но как сделать сюда хотяб функцию перехода на сл трек? где вообще взять как можно больше инфы о том как программно управлять CD ROMom например заблокировать его
Экспериментатор должен быть достаточно ленив, чтоб не копиться в мелочах
Cricket2007 вне форума Ответить с цитированием
Старый 16.06.2008, 03:18   #2
Cricket2007
Пользователь
 
Регистрация: 12.02.2008
Сообщений: 14
По умолчанию

Короче если кто знает то подскажите как на С++ управлять сидиромом хочу узнать как можно больше по этой теме
Экспериментатор должен быть достаточно ленив, чтоб не копиться в мелочах
Cricket2007 вне форума Ответить с цитированием
Старый 16.06.2008, 12:51   #3
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Знаю только как закрывать и открывать СD_ROM

Код:
unit DriveTools;

interface

uses

Windows, SysUtils, MMSystem;

function CloseCD(Drive : Char) : Boolean;
function OpenCD(Drive : Char) : Boolean;

implementation

function OpenCD(Drive : Char) : Boolean;
Var

Res : MciError;
OpenParm: TMCI_Open_Parms;
Flags : DWord;
S : String;
DeviceID : Word;
begin

Result:=false;
S:=Drive+':';
Flags:=mci_Open_Type or mci_Open_Element;
With OpenParm do begin
dwCallback := 0;
lpstrDeviceType := 'CDAudio';
lpstrElementName := PChar(S);
end;
Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
IF Res<>0 Then exit;
DeviceID:=OpenParm.wDeviceID;
try
Res:=mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
IF Res=0 Then exit;Result:=True;
finally
mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm));
end;
end;

function CloseCD(Drive : Char) : Boolean;
Var

Res : MciError;
OpenParm: TMCI_Open_Parms;
Flags : DWord;
S : String;
DeviceID : Word;
begin

Result:=false;
S:=Drive+':';
Flags:=mci_Open_Type or mci_Open_Element;
With OpenParm do begin
dwCallback := 0;
lpstrDeviceType := 'CDAudio';
lpstrElementName := PChar(S);
end;
Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
IF Res<>0 Then exit;
DeviceID:=OpenParm.wDeviceID;
try
Res:=mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
IF Res=0 Then exit;
Result:=True;
finally
mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm));
end;
end;


end.
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 16.06.2008, 15:49   #4
Fellics{новичок}
Форумчанин
 
Аватар для Fellics{новичок}
 
Регистрация: 25.03.2008
Сообщений: 159
По умолчанию

А зачем такой большой код??? можно же реализовать открытие и закрытие дисковода в гораздо меньшем коде, достаточно будет нажеть на кнопку.
Fellics{новичок} вне форума Ответить с цитированием
Старый 16.06.2008, 16:01   #5
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Этот код будет работать при наличии двух и больше CD-ROM -ов.
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление громкостью Jupiter Общие вопросы Delphi 2 29.06.2008 15:43
Управление голосом prizrak1390 Общие вопросы Delphi 2 24.06.2008 21:04
Управление приложениями voron29 Общие вопросы Delphi 1 14.03.2008 12:38
Управление Монитором _XspeC_ Общие вопросы Delphi 3 26.03.2007 19:28