
08.02.2007, 16:57
|
Прохожий
|
|
Регистрация: 19.01.2007
Адрес: Мліїв, Україна
Сообщения: 13
Репутация: 10
|
|
Цитата:
Сообщение от dron-s
в общем, в чём заключалась мысль (идея) в том чтобы при старте проги, определить сколько приводов в системе и какие буквы они занимают, записать их куда нибудь (я выбрал ComboBox) а потом по очереди в цикле их открывать и закрывать...
вот полный код проекта: на форму кинуть один батон и ComboBox
Код:
uses
MMSystem;
//...
//Инициализация приводов в системе
procedure TForm1.FormCreate(Sender: TObject);
var
w:dword;
Root:string;
I, K:integer;
Driv: array [1..25] of string;
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;
//функция на открытие привода
function 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 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.Button1Click(Sender: TObject);
var
i:integer;
begin
for I := 0 to Combobox1.Items.Count do
if not openCD(ComboBox1.Items[i]) then
CloseCD(ComboBox1.Items[i]);
end;
|
А как сделать, чтобы в зависимости от количества дисководов автоматически добавлялись пункты в MainMenu и можно было выбрать самостоятельно открываемый дисковод?
|