Code:

var DriveType: UInt;

 

DriveType := GetDriveType(PChar('F:\'));

if DriveType = DRIVE_CDROM then ShowMessage('Сидюк');

 

Можно использовать функцию Windows API GetDriveType() чтобы определить является ли дисковод CD-ROM'мом. И функцию API GetVolumeInformation() чтобы проверить VolumeName на равенство 'Audio CD'.

Пример:

 

CD может иметь или не иметь серийный номер и/или универсальный код продукта (Universal Product Code). MCI-расширение Windows предоставляет эту информации с помощью комманды MCI_INFO_MEDIA_IDENTITY command. Эта команда возвращает уникальную ID-строку.

Пример:

Code:

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 do

  begin

    if (mask and drivemap) <> 0 then

      if GetDriveType(PChar(root)) = DRIVE_CDROM then

      begin

        Inc(Result);

      end;

    mask := mask shl 1;

    Inc(root[1]);

  end;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  Label1.Caption := IntToStr(GetNumCDDrives);

end;

 

Некоторые приложения должны знать, когда пользователь вставляет или  удаляет компакт-диска или DVD-диска с компакт-дисков без

 опрос для медиа-изменений. Windows предоставляет способ уведомить об этом  приложения через сообщение WM_DEVICECHANGE.

Как это сделать через WMI я вроде разобрался.

Только не нравиться мне, что приходится перебирать в цикле все свойства

Win32_CDROMDrive. Может кто знает как сразу к конкретному свойству обратиться, т.е.

избавиться от строки "while PropEnum.Next(1, TempObj, Value) = S_OK do"

 

Вот рабочий пример для D7.

Вступление

 Наконец, я решился на написание этой статьи, идея пришла давно, но полностью систематизировать решился только сегодня. Сегодня мы не будем рассматривать конкретного взлома. На это есть две причины:

 1) У меня начал глючить CD-ROM, пора менять

2) Статья получилась бы слишком длинной

 В принципе вторая причина меня волнует мало, но первая встала доста- точно остро.