Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 67

/ вопрос открыт /

Возможно и в Delphi-программе открыть DVD дисковод?

Иван-488 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Иван-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.

Приложение:
  1.  
  2. procedure CDROMsList(var DrvLst:TStringList);
  3. var buf:array[0..255] of char;
  4. tmp:string;
  5. begin
  6. if DrvLst=nil then DrvLst:=TStringList.Create;
  7. DrvLst.Clear;
  8. GetLogicalDriveStrings(256,buf);
  9. tmp:='';
  10. for i:=0 to 254 do
  11. begin
  12. if buf[i]<>#0 then
  13. tmp:=tmp+buf[i]
  14. else
  15. begin
  16. if GetDriveType(pchar(tmp))=DRIVE_CDROM then
  17. DrvLst.Add(tmp);
  18. tmp:='';
  19. if buf[i+1]=#0 then break;
  20. end;
  21. end;
  22. end;
  23.  
  24.  
  25.  
  26. procedure CloseEject(Drv:string;DoEject:boolean);
  27. var OpenParm:TMCI_OPEN_PARMS;
  28. SetParm:TMCI_Set_Parms;
  29. GenParm:TMCI_GENERIC_PARMS;
  30. ID:integer;
  31.  
  32. begin
  33. openparm.lpstrDeviceType:=pchar('CDAudio');
  34. openparm.lpstrElementName:=pchar(Drv);
  35. if mciSendCommand(0, MCI_OPEN,MCI_OPEN_TYPE or MCI_WAIT or MCI_OPEN_ELEMENT, LongInt(@OpenParm))=0 then
  36. begin
  37. ID:=openparm.wDeviceID;
  38. if DoEject then
  39. mciSendCommand(ID,MCI_SET,MCI_WAIT or MCI_SET_DOOR_OPEN,LongInt(@SetParm))
  40. else
  41. mciSendCommand(ID,MCI_SET,MCI_WAIT or MCI_SET_DOOR_CLOSED,LongInt(@SetParm));
  42. mciSendCommand(ID,MCI_CLOSE,0,LongInt(@GenParm));
  43. end;
  44. end;


Ответ отправил: Косолапов Дмитрий Юрьевич (статус: 8-ой класс)
Время отправки: 28 июня 2006, 10:29

Ответ #3. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, Иван!
Скажу Вам по секрету, открытие/закрытие DVD абсолютно ничем не отличается от открытия/закрытия CD, поскольку за это отвечает единый Media Control Interface (MCI), реализованный ввиде winmm.dll. Большинство функций реализуются через посылку командных строк в функцию mciSendStringA.
Открыть привод: "set cdaudio door open"
Закрыть привод: "set cdaudio door closed".
Готовых примеров полно в Интернете.
P.S. Просто добавил к предыдущим ответам, чтобы было понятно как это работает.

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 28 июня 2006, 14:19


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 21 июля 2008, 21:15; участников в обсуждении: 1.
Аксион

Аксион (статус: 4-ый класс), 21 июля 2008, 21:15 [#1]:

А можно спросить как узнать отрыт в данный момент или закрыт дисковод?

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:31
Выполнено за 0.02 сек.