Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Получение идентификатора диска

Автор: Vasili Pincuk

Только что прошло сообщение по компьютерным сетям!!! Внимание!!!! Предупреждение!!! Новый вирус "Виагра"! Превращает ваш трех-с-половиной дюймовый флоппи в ХАРД-драйв!!!

Как получить идентификатор находящегося в CD-ROM'е аудио-компакта?


const
  MCI_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;
  { блок параметров для командного сообщения MCI_INFO }
  
type
  PMCI_Info_ParmsA = ^TMCI_Info_ParmsA;
  PMCI_Info_ParmsW = ^TMCI_Info_ParmsW;
  PMCI_Info_Parms = PMCI_Info_ParmsA;
  TMCI_Info_ParmsA = record
    dwCallback: DWORD;
    lpstrReturn: PAnsiChar;
    dwRetSize: DWORD;
  end;
  TMCI_Info_ParmsW = record
    dwCallback: DWORD;
    lpstrReturn: PWideChar;
    dwRetSize: DWORD;
  end;
  TMCI_Info_Parms = TMCI_Info_ParmsA;

Идентификатор возвращается функцией 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 do
  begin
    s := chr(ord('a') + i) + ':\';
    if (mask and 1) <> 0 then
      case 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 получаем все диски на данном компьютере.

Whith best regards Vasili Pincuk
ICQ 10558844
http://www.geocities.com/pvasili
E-mail: pvasili@geocities.com

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay