Home » Tipps & Tricks » System » Hardware » Laufwerkstyp ermitteln (Festplatte, CD, Ram-Disk…)

Laufwerkstyp ermitteln (Festplatte, CD, Ram-Disk…)

Folgende Prozedur ermittelt alle vorhandenen Laufwerke. Sie erwartet als Parameter eine Liste, die mit den Laufwerksnamen und -typen gefüllt wird:

procedure GetDrives(const AItems: TStrings);
const
  DriveTypeTexts: array[DRIVE_UNKNOWN..DRIVE_RAMDISK] of string =
   ('Unbekannt', 'Kein Wurzelverzeichnis', 'Diskette', 'Festplatte', 'Netzlaufwerk', 'CDROM', 'RAMDisk');
var
  Drive: Char;
  DriveType: Integer;
  DriveMask: Integer;
  Flag: Integer;
begin
  DriveMask := GetLogicalDrives; //Bitmaske holen
  flag := 1; //Startflag setzen
  for Drive := 'A' to 'Z' do //Jeden Buchstaben gegenprüfen
  begin
    if (flag and DriveMask)  0 then
    begin
      DriveType := GetDriveType(PChar(Format('%S:',[Drive]) ) ) ;
      AItems.Add(Format('%s: %s', [Drive, DriveTypeTexts[DriveType]]));
    end;
    flag := flag shl 1; //Ein Bit weiter nach links gehen ( = flag * 2)
  end;
end;

Die Funktion GetLogicalDrives gibt eine Bitmaske zurück, welche die verfügbaren Laufwerke darstellt.Das erste Bit entspricht dem Laufwerk ‚A‘, das zweite dem Laufwerk ‚B‘ usw.Die Bitmaske könnte also so aussehen:

0...00010011 entspricht dem Dezimalwert 16 + 2 + 1 = 19Z...HGFEDCBA entspricht
den Laufwerken A, B und E

Die Prozedur GetDrives prüft anhand dieser Bitmaske jedes Bit, ob es gesetzt ist. Ist es gesetzt, wird das Laufwerk der Liste hinzugefügt.Es wird dabei zwischen Festplatten, Wechsellaufwerken, CD-ROM/DVD-Laufwerken, Netzlaufwerken und RamDisks unterschieden.Ein Beispielaufruf könnte so aussehen:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  GetDrives(Listbox1.Items) 
end;