Только что прошло сообщение по компьютерным сетям!!! Внимание!!!! Предупреждение!!! Новый вирус "Виагра"! Превращает ваш трех-с-половиной дюймовый флоппи в ХАРД-драйв!!!
Как получить идентификатор находящегося в CD-ROM'е аудио-компакта?
Идентификатор возвращается функцией MCI_INFO_MEDIA_IDENTITY в виде строки с
десятичным числом. Для получения дополнительной информации обратитесь к
электронной справке (Win32 и компонент TMediaPlayer).
Исправления
// метка дискаprocedure GetDriveInfo(VolumeName: string;
var VolumeLabel, SerialNumber, FileSystem: string);
var
VolLabel, FileSysName: array[0..255] of char;
SerNum: pdword;
MaxCompLen, FileSysFlags: dword;
begin
New(SerNum);
GetVolumeInformation(PChar(VolumeName), VolLabel,
255, SerNum, MaxCompLen, FileSysFlags, FileSysName, 255);
VolumeLabel := VolLabel;
SerialNumber := Format('%x', [SerNum^]);
FileSystem := FileSysName;
Dispose(SerNum);
end;
// далееvar
VolLabel, SN, FileSystem, S: string;
begin
s := 'g:\'; // имя CD дисковода
GetDriveInfo(S, VolLabel, SN, FileSystem);
получаем:
VolLabel - 'ARMSTRONG' // метка диска
SN - B5FF77AD // номер серийный
FileSystem - CDFS // тип файловой системы
Работает не только для CD
для всех типов дисков ... Далее:
// метка дискаprocedure GetAllDrive(Sender: TObject);
var
i, mask: integer;
s: string;
begin
mask := GetLogicalDrives;
i := 0;
while mask <> 0 dobegin
s := chr(ord('a') + i) + ':\';
if (mask and 1) <> 0 thencase GetDriveType(PChar(s)) of
0: ListBox1.Items.Add(s + ' unknown.');
1: ListBox1.Items.Add(s + ' not exist.');
DRIVE_REMOVABLE: ListBox1.Items.Add(s + ' removable.'); // floppy,zip
DRIVE_FIXED: ListBox1.Items.Add(s + ' fixed.');
DRIVE_REMOTE: ListBox1.Items.Add(s + ' network.');
DRIVE_CDROM: ListBox1.Items.Add(s + ' CD-ROM.');
DRIVE_RAMDISK: ListBox1.Items.Add(s + ' RAM.');
end;
inc(i);
mask := mask shr 1;
end;
end;
В ListBox1 получаем все диски на данном компьютере.
Программа GetDriveInfo - пример кода на языке Delphi, демонстрирующий получение идентификатора CD-ROM диска и информацию о всех дискетах на компьютере.
Вот разбивка кода:
В первой части определены константы для команд MCI (Media Control Interface), типы параметров MCI info и структуры параметров MCI info.
Процедура GetDriveInfo принимает имя тома в виде входного параметра и возвращает три строки: VolumeLabel, SerialNumber и FileSystem. Она использует функцию Windows API GetVolumeInformation для получения этой информации.
В основной части кода вызывается GetDriveInfo с буквой диска 'G:' (CD-ROM диск) и присваиваются полученные значения переменным.
Процедура GetAllDrive получает список всех дискет на компьютере с помощью функции Windows API GetLogicalDrives. Затем она проходит по каждому диску, получает его тип с помощью GetDriveType, и добавляет его в список бокса (ListBox1) с описательным текстом.
Вывод будет списком всех дискет на компьютере, включая их тип (например, CD-ROM, removable, fixed, network).
Обратите внимание, что код написан на языке Delphi, но я предоставлю краткое перевод в современный синтаксис Pascal:
programGetDriveInfo;{$APPTYPE CONSOLE}usesWindows,Messages;constMCI_INFO_PRODUCT=$00000100;MCI_INFO_FILE=$00000200;MCI_INFO_MEDIA_UPC=$00000400;MCI_INFO_MEDIA_IDENTITY=$00000800;MCI_INFO_NAME=$00001000;MCI_INFO_COPYRIGHT=$00002000;typePMCI_Info_ParmsA=^TMCI_Info_ParmsA;PMCI_Info_ParmsW=^TMCI_Info_ParmsW;TMCI_InfoParms=recorddwCallback:DWORD;lpstrReturn:PAnsiChar;dwRetSize:DWORD;end;procedureGetDriveInfo(VolumeName:string;varVolumeLabel,SerialNumber,FileSystem:string);varVolLabel,FileSysName:array[0..255]ofchar;SerNum:PDWORD;MaxCompLen,FileSysFlags:DWORD;beginNew(SerNum);GetVolumeInformation(PChar(VolumeName),VolLabel,255,SerNum,MaxCompLen,FileSysFlags,FileSysName,255);VolumeLabel:=VolLabel;SerialNumber:=Format('%x',[SerNum^]);FileSystem:=FileSysName;Dispose(SerNum);end;varVolLabel,SN,FileSystem,S:string;begins:='G:\';// имя CD-дискаGetDriveInfo(s,VolLabel,SN,FileSystem);WriteLn(VolLabel);// ArmstrongWriteLn(SN);// B5FF77ADWriteLn(FileSystem);// CDFSend.
Обратите внимание, что этот код является quite old и может не работать как ожидалось с современными операционными системами.
В статье рассматривается способ получения идентификатора диска, в том числе CD-ROM, с помощью функции MCI_INFO_MEDIA_IDENTITY и использования процедуры GetDriveInfo для определения метки диска, серийного номера и типа файловой системы.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.