Питання # 67 …ковод … (Робота з пристроями та залізом)

Спільнота програмістів Спілкування, допомога, обмін досвідом

Delphi.int.ru Expert

Інші розділи порталу

Перехід до питання:

Статистика за сьогодні:

Запитання:0 Відповіді:0 Міні-форуми:0

Кращі експерти

Питання # 67

Чи можливо і в Delphi-програмі відкрити DVD дисковод?

Відповідь #1. Відповідає експерт:min@y™

Скачай пакет модулів DelphiWorks ось звідси: http://www.torry.net/vcl/packs/middle/dw.zip Там є модуль DriveWorks.pas, в якому, крім іншого, є такі 2 функції:

функція OpenCD (Drive: Char): Boolean; функція CloseCD(Drive: Char): Boolean;

Про результати роботи цих функцій повідом на форум цього питання.

Відповідь #2. Відповідає експерт:Косолапов Дмитро Юрійович

Якщо не хочеться використовувати сторонні модулі, дві процедури. 1-а отримує список всіх CD-ROM (я думаю, стане в нагоді), а 2-я відкриває/закриває трей потрібного диска. І не забудь підключити модуль mmsystem.

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

Відповідь #3. Відповідає експерт:Матвєєв Ігор Володимирович

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

Міні-форум питання

А можна запитати як дізнатися про відкритий в даний момент чи закритий дисковод?