|
Вопрос # 67/ вопрос открыт / |
|
Возможно и в Delphi-программе открыть DVD дисковод?
 |
Вопрос задал: Иван-488 (статус: Посетитель)
Вопрос отправлен: 27 июня 2006, 21:48
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: min@y™
Скачай пакет модулей DelphiWorks вот отсюда: http://www.torry.net/vcl/packs/middle/dw.zip
Там есть модуль DriveWorks.pas, в котором, помимо прочего, есть вот такие 2 функции:
function OpenCD(Drive: Char): Boolean;
function CloseCD(Drive: Char): Boolean;
О результатах работы этих функций сообщи на форум этого вопроса.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 28 июня 2006, 08:44
|
Ответ #2. Отвечает эксперт: Косолапов Дмитрий Юрьевич
Если не хочется использовать сторонние модули, вот две процедуры. 1-я получает список всех CD-ROM (я думаю, пригодится), а 2-я открывает/закрывает трей нужного диска. И не забудь подключить модуль mmsystem.
Приложение: Переключить в обычный режим-
- procedure CDROMsList(var DrvLst:TStringList);
- var buf:array[0..255] of char;
- tmp:string;
- begin
- if DrvLst=nil then DrvLst:=TStringList.Create;
- DrvLst.Clear;
- GetLogicalDriveStrings(256,buf);
- tmp:='';
- for i:=0 to 254 do
- begin
- if buf[i]<>#0 then
- tmp:=tmp+buf[i]
- else
- begin
- if GetDriveType(pchar(tmp))=DRIVE_CDROM then
- DrvLst.Add(tmp);
- tmp:='';
- if buf[i+1]=#0 then break;
- end;
- end;
- end;
-
-
-
- procedure CloseEject(Drv:string;DoEject:boolean);
- var OpenParm:TMCI_OPEN_PARMS;
- SetParm:TMCI_Set_Parms;
- GenParm:TMCI_GENERIC_PARMS;
- ID:integer;
-
- begin
- openparm.lpstrDeviceType:=pchar('CDAudio');
- openparm.lpstrElementName:=pchar(Drv);
- if mciSendCommand(0, MCI_OPEN,MCI_OPEN_TYPE or MCI_WAIT or MCI_OPEN_ELEMENT, LongInt(@OpenParm))=0
then
- begin
- ID:=openparm.wDeviceID;
- if DoEject then
- mciSendCommand(ID,MCI_SET,MCI_WAIT or MCI_SET_DOOR_OPEN,LongInt(@SetParm))
- else
- mciSendCommand(ID,MCI_SET,MCI_WAIT or MCI_SET_DOOR_CLOSED,LongInt(@SetParm));
- mciSendCommand(ID,MCI_CLOSE,0,LongInt(@GenParm));
- end;
- end;
Ответ #3. Отвечает эксперт: Матвеев Игорь Владимирович
Здравствуйте, Иван!
Скажу Вам по секрету, открытие/закрытие DVD абсолютно ничем не отличается от открытия/закрытия CD, поскольку за это отвечает единый Media Control Interface (MCI), реализованный ввиде winmm.dll. Большинство функций реализуются через посылку командных строк в функцию mciSendStringA.
Открыть привод: "set cdaudio door open"
Закрыть привод: "set cdaudio door closed".
Готовых примеров полно в Интернете.
P.S. Просто добавил к предыдущим ответам, чтобы было понятно как это работает.
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 21 июля 2008, 21:15; участников в обсуждении: 1.
|
Аксион (статус: 4-ый класс), 21 июля 2008, 21:15 [#1]:
А можно спросить как узнать отрыт в данный момент или закрыт дисковод?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|