Содержание материала

 

Code:

mciSendString('Set cdaudio Door Open Wait', nil, 0, handle);

mciSendCommand(mp.DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);

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

 

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

 

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

 

 

Code:

uses

MMSystem;

 

 

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

 

Code:

//Для открытия

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

 


Code:

public

{ Public declarations }

IsOpen: boolean;

 

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

Code:

procedure TForm1.FormCreate(Sender: TObject);

begin

IsOpen := false;

end;

 

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

Code:

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;


 

Code:

// Данная прога извлекает и закравет 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.

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить