Питання # 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.
- 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);
- varOpenParm: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 або MCI_SET_DOOR_OPEN,LongInt(@SetParm))
- else
- mciSendCommand(ID,MCI_SET,MCI_WAIT або 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. Просто додав до попередніх відповідей, щоб було зрозуміло, як це працює.
Міні-форум питання
А можна запитати як дізнатися про відкритий в даний момент чи закритий дисковод?