function GetFirstCDROMDrive: char;
var
drivemap, mask: DWORD;
i: integer;
root: string;
begin
Result := #0;
root := 'A:\';
drivemap := GetLogicalDrives;
mask := 1;
for i := 1 to 32 dobeginif (mask and drivemap) <> 0 thenif GetDriveType(PChar(root)) = DRIVE_CDROM thenbegin
Result := root[1];
Break;
end;
mask := mask shl 1;
Inc(root[1]);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(GetFirstCDROMDrive);
end;
{********************************}function GetNumberOfCDDrives: Byte;
var
drivemap, mask: DWORD;
i: integer;
root: string;
begin
Result := 0;
root := 'A:\';
drivemap := GetLogicalDrives;
mask := 1;
for i := 1 to 32 dobeginif (mask and drivemap) <> 0 thenif GetDriveType(PChar(root)) = DRIVE_CDROM thenbegin
Inc(Result);
end;
mask := mask shl 1;
Inc(root[1]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntToStr(GetNumCDDrives);
end;
Программа на Delphi, которая извлекает первый доступный привод CD-ROM и считает общее количество привода CD-ROM на системе.
Вот разбивка функций:
GetFirstCDROMDrive: Функция возвращает букву или номер первого доступного привода CD-ROM. Она делает это, перебирая все возможные буквы привода от 'A' до 'Z' (или до 32, whichever comes first), проверяет каждый привод на CD-ROM с помощью функции GetDriveType, и возвращает первый, который она находит.
GetNumberOfCDDrives: Функция возвращает общее количество привода CD-ROM на системе. Она делает это, перебирая все возможные буквы привода от 'A' до 'Z' (или до 32, whichever comes first), проверяет каждый привод на CD-ROM с помощью функции GetDriveType, и увеличивает счетчик для каждого, который она находит.
Два процедуры (Button2Click и Button1Click) - это обработчики событий кнопок на форме. Когда вторая кнопка нажата, она отображает сообщение с буквой или номером первого доступного привода CD-ROM. Когда первая кнопка нажата, она обновляет метку на форме для отображения общего количества привода CD-ROM.
Вот пример модификации кода:
Вместо использования GetLogicalDrives и перебора всех возможных букв привода, вы могли использовать функцию EnumNetworkDrives, чтобы получить список всех сетевых привода, а затем фильтровать этот список только для CD-ROM привода. Это было бы более эффективно, если есть много сетевых привода.
Альтернативно, вместо проверки каждого типа привода индивидуально с помощью GetDriveType, вы могли использовать одиночный цикл для проверки каждого привода и увеличения счетчика для каждого, который является CD-ROM приводом. Это упрощало бы код и сделало его более простым в обслуживании.
Вот пример модификации кода:
functionGetFirstCDROMDrive:char;vardrivelist,mask:DWORD;i,rootsize:integer;root:string;beginResult:=#0;root:='A:\';drivelist:=GetLogicalDrives;mask:=1;fori:=1to26do// only iterate up to Zbeginif(maskanddrivelist)<>0thenifIsCDROM(root)thenbeginResult:=root[1];Break;end;mask:=maskshl1;Inc(root[1]);end;end;functionGetNumberOfCDDrives:Byte;vardrivelist,mask:DWORD;i,rootsize:integer;root:string;beginResult:=0;root:='A:\';drivelist:=GetLogicalDrives;mask:=1;fori:=1to26do// only iterate up to Zbeginif(maskanddrivelist)<>0thenifIsCDROM(root)thenInc(Result);mask:=maskshl1;Inc(root[1]);end;end;functionIsCDROM(drive:string):boolean;begin// implement your own CD-ROM detection logic here// for example, you could check the drive type using GetDriveTypeResult:=False;// default to not being a CD-ROM driveend;
В этом коде используется одиночный цикл для перебора всех возможных букв привода и проверки каждого на CD-ROM привод с помощью отдельной функции IsCDROM. Это упрощает код и делает его более простым в обслуживании.
В статье описываются два функционаля: получение буквы или номера CD-ROM-диска и определение количества доступных CD-ROM-устройств на компьютере.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.