» Управление CD приводом Borland Delphi. . . Блог программистов


Блог программистов






20072 Мар

Управление CD приводом

CD приводом (далее просто CD) я думаю пользуются все без исключения. Давайте разберём как создать несложную программу открытия CD. Создадим новый проект. Кидаем на форму ComboBox и две Button. В разделе uses дописываем MMSystem. Создадим универсальную функцию. В Unit’е после {$R *.dfm} пишем:

function CD(Drive: PChar; OpenClose: Boolean): Boolean;
var
Res: MciError;
OpenParm: TMCI_Open_Parms;
Flags: DWord;
DeviceID: Word;
begin
Result := false;
Flags := mci_Open_Type or mci_Open_Element;
with OpenParm do
begin
dwCallback := 0;
lpstrDeviceType := ‘CDAudio’;
lpstrElementName := Drive;
end;
Res := mciSendCommand(0, MCI_OPEN, Flags, Longint(@OpenParm));
if Res <> 0 then exit;
DeviceID := OpenParm.wDeviceID;
try
if OpenClose=true then
Res := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0) else
Res := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
if Res = 0 then exit;
Result := True;
finally
if OpenClose=true then
mciSendCommand(DeviceID, MCI_OPEN, Flags, Longint(@OpenParm)) else
mciSendCommand(DeviceID, MCI_CLOSE, Flags, Longint(@OpenParm));
end;
end;
В процедуре создания формы пишем:

procedure TForm1.FormCreate(Sender: TObject);
var
nid : TNotifyIconData;
w:dword;
Root:string;
i:integer;
begin
w:=GetLogicalDrives;
Root := ‘#:’;
for i := 0 to 25 do
begin
Root[1] := Char(Ord(‘A’)+i);
if (W and (1 shl i))>0 then
if GetDriveType(Pchar(Root)) = DRIVE_CDROM then
begin
ComboBox1.Items.Add(Root);
ComboBox1.Text := Root;
end;
end;
end;

Далее в нажатиях на кнопки пишем:

procedure TForm1.Button1Click(Sender: TObject);
begin
CD(PChar(ComboBox1.Text),true); // открыть
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
CD(PChar(ComboBox1.Text),true); // закрыть
end;

Всё программа готова.

Статья была переписана заново Автором.

Комментарии

  1. 14 апреля, 2007 | 04:43

    Ну вот… ещё одни…
    Может уже стоит сделать какой-нить универсальный модуль… что ли…
    половина программ установленных у меня на компе работает с cd-rom…
    имхо:
    может всё таки стоит выделять свои программы чем-нибудь другим?
    cd-rom уже не оригинально…

  2. 21 июня, 2007 | 13:12

    Это не ещё одна программа, это код для открытия CD-Rom’а по букве. Не оригинально это вот этот код mciSendString(‘Set cdaudio door open wait’, nil, 0, handle);

  3. yurii
    1 июля, 2007 | 15:47

    а этот код можно использовать для DVD ИЛИ НЕЛЬЗЯ???????

  4. 25 июля, 2007 | 13:21

    Код из статьи вроде работает для всех приводов (даже для виртуальных)

  5. Cyber
    26 июля, 2007 | 12:03

    Намного проще.
    MciSendString(0,’Set cdaudio door open’,0,0); -Открыть
    MciSendString(0,’Set cdaudio door close’,0,0); -Закрыть

    MciSendString(Id привода,’Set cdaudio door open’,0,0);
    id привода можно получить из кода выше