Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как выдвинуть дверцу CD-ROM?

01.01.2007
mciSendString('Set cdaudio Door Open Wait', nil, 0, handle);
mciSendCommand
(mp.DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);

Взято с сайта https://blackman.wp-club.net/


Основываясь, на этой возможности можно написать классную прогу. Представьте себе: ламерюга с умным видом тайпает какой-нибудь док, а тут его сидюк начинает вести себя как взбесившийся: то откроется, то закроется, то откроется, то закроется, то откроется, то закроется, то откроется, то закроется, то откроется, то закроется, то откроется, то закроется, то откроется, то закроется, то откроется, то закроется... и так, например, каждый час... (или минуту...или секунду...)

Для начала научимся открывать CD-ROM по нажатию простого "батона":

В uses нужно сначала объявить модуль MMSystem:

uses
 
MMSystem;

По нажатию кнопок написать:

//Для открытия
procedure TForm1
.OpenBtnClick(Sender: TObject);
begin
  mciSendString
('Set cdaudio door open wait', nil, 0, handle);
end;
 
//Для закрытия
procedure TForm1
.CloseBtnClick(Sender: TObject);
begin
  mciSendString
('Set cdaudio door closed wait', nil, 0, handle);
end;

Ну а если вы уж хотите, чтобы это всё происходило автоматически с периодичностью в несколько минут, тогда выносим наш любимый компонент - Timer. Устанавливаем его свойство Interval в 30000 миллисекунд - это 30 секунд, т.е. каждые полминуты глупый ламерюга будет подскакивать...И на событие OnTimer, предвкушая удовольствие, пишем: сначала в публичных объявлениях объявим переменную логического типа IsOpen для обозначения времени когда открыт CD-ROM

public
 
{ Public declarations }
 
IsOpen: boolean;

По созданию окна (OnCreate) устанавливаем эту переменную в false, т.к. изначально, когда наша прога только запускается, CD-ROM не открыт:

procedure TForm1.FormCreate(Sender: TObject);
begin
 
IsOpen := false;
end;

И наконец, по таймеру пишем:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 
if IsOpen = false then
 
begin
    mciSendString
('Set cdaudio door open wait', nil, 0, handle);
   
IsOpen:=true;
 
end
 
else
 
begin
    mciSendString
('Set cdaudio door closed wait', nil, 0, handle);
   
IsOpen:=false;
 
end;
end;
https://delphiworld.narod.ru/

DelphiWorld 6.0


// Данная прога извлекает и закравет CD-ROM выбранные в Combobox1
// На форме разместите Button1, Button2 и Combobox1
 
uses
 
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 
Dialogs, StdCtrls, ComCtrls, MMSystem;
 
type
  TForm1
= class(TForm)
    Button1
: TButton;
    Button2
: TButton;
    ComboBox1
: TComboBox;
    procedure Button1Click
(Sender: TObject);
   
function CloseCD(Drive : string) : Boolean;
   
function OpenCD(Drive : string) : Boolean;
    procedure
FormCreate(Sender: TObject);
    procedure Button2Click
(Sender: TObject);
 
private
 
public
end;
 
var
  Form1
: TForm1;
 
Driv: array [1..25] of string;
 
implementation
 
{$R *.dfm}
 
procedure TForm1
.Button1Click(Sender: TObject);
begin
 
OpenCD(ComboBox1.Text);
end;
 
function TForm1.OpenCD(Drive: string): Boolean;
var
 
Res : MciError;
 
OpenParm: TMCI_Open_Parms;
 
Flags : DWord;
  S
: string;
 
DeviceID : Word;
begin
 
Result:=false;
  S
:=Drive;
 
Flags:=mci_Open_Type or mci_Open_Element;
 
with OpenParm do
 
begin
    dwCallback
:= 0;
    lpstrDeviceType
:= 'CDAudio';
    lpstrElementName
:= PChar(S);
 
end;
 
Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
 
if Res<>0 then
   
exit;
 
DeviceID:=OpenParm.wDeviceID;
 
try
   
Res:=mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
   
if Res=0 then
     
exit;
   
Result:=True;
 
finally
    mciSendCommand
(DeviceID, mci_Close, Flags, Longint(@OpenParm));
 
end;
end;
 
function TForm1.CloseCD(Drive: string): Boolean;
var
 
Res : MciError;
 
OpenParm: TMCI_Open_Parms;
 
Flags : DWord;
  S
: string;
 
DeviceID : Word;
begin
 
Result:=false;
  S
:=Drive;
 
Flags:=mci_Open_Type or mci_Open_Element;
 
with OpenParm do
 
begin
    dwCallback
:= 0;
    lpstrDeviceType
:= 'CDAudio';
    lpstrElementName
:= PChar(S);
 
end;
 
Res := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm));
 
if Res<>0 then
   
exit;
 
DeviceID:=OpenParm.wDeviceID;
 
try
   
Res:=mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
   
if Res=0 then
     
exit;
   
Result:=True;
 
finally
    mciSendCommand
(DeviceID, mci_Close, Flags, Longint(@OpenParm));
 
end;
end;
 
procedure TForm1
.FormCreate(Sender: TObject);
var
  w
:dword;
 
Root:string;
  I
, K:integer;
begin
  k
:=0;
  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
        k
:=k+1;
       
Driv[k] := Root;
        ComboBox1
.Items.Add(Driv[k]);
        ComboBox1
.Text := Driv[1];
     
end;
 
end;
end;
 
procedure TForm1
.Button2Click(Sender: TObject);
begin
 
CloseCD(ComboBox1.Text);
end;
 
end.
https://delphiworld.narod.ru/

DelphiWorld 6.0