Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 278
от 23.12.2005, 00:09

Администратор:Калашников О.А.
В рассылке:Подписчиков: 253, Экспертов: 36
В номере:Вопросов: 1, Ответов: 2


Вопрос № 31718: Здравствуйте. Я так понимаю, что об объявлений API функций в Borland C++Builder 6 нужно много рассказывать. Но может быть вы хоть вкратце, расскажете, как это делается, где это пишется (в кавычках, на самом верху или ещё где). И ещё, помогите...

Вопрос № 31.718
Здравствуйте.
Я так понимаю, что об объявлений API функций в Borland C++Builder 6 нужно много рассказывать. Но может быть вы хоть вкратце, расскажете, как это делается, где это пишется (в кавычках, на самом верху или ещё где).
И ещё, помогите прогу написать для открывания CD-ROM с объявлением API функции.
Заранее благодарю.
Отправлен: 18.12.2005, 00:07
Вопрос задал: Неизвестнов Том (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: PROD
Здравствуйте, Неизвестнов Том!
ниже статья по работе с сидюками. удачи

Как программно управлять 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'ом не просто, а очень просто.

Открыть 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
Ответ отправил: PROD (статус: 2-ой класс)
Отправлен: 18.12.2005, 07:34

Отвечает: DIMANET
Здравствуйте, Неизвестнов Том!
Насколько я знаю CD открывается так:

/---------------------------/
TMCI_Open_Parms OpenParm;
TMCI_Generic_Parms GenParm;
TMCI_Set_Parms SetParm;
Cardinal DI;
OpenParm.dwCallback = 0;
OpenParm.lpstrDeviceType = "CDAudio";
mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE, Longint(&OpenParm));
DI = OpenParm.wDeviceID;
if (!CDROMOPEN)
{
mciSendCommand(DI, MCI_SET, MCI_SET_DOOR_OPEN, Longint(&SetParm));
CDROMOPEN = true; // открыть
}
else
{
mciSendCommand(DI, MCI_SET, MCI_SET_DOOR_CLOSED, Longint(&SetParm));
CDROMOPEN = false; // закрыть
}

/--------------------------/
Ответ отправил: DIMANET (статус: 1-ый класс)
Отправлен: 19.12.2005, 13:07


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.cplus
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное