Home | Kontakt | Sitemap

Start

Über mich

Kontakt

Sitemap

Lizenz

Anleitungen

DVD, miniDVD

SVCD

Audio, Audio-CD (CD-DA)

AVI

Software

Von Freunden und Bekannten

Eigene Programme

Programmierung

Delphi

Lazarus

Delphi/Lazarus

Projekte

MPEG-1/2 Video

Optische Laufwerke

Audio-CD (CDDA)

Raspberry Pi Dashcam

Verschiedenes

MPEG 2 Schnitt

Project X

VCD Easy

Hardlinks

Windows

Links

Software

Projekte | Optische Laufwerke Laufwerke - Buchstaben

Buchstaben

Für die Ermittlung der Laufwerksbuchstaben kann man die folgenden Funktionen verwenden:

Laut Dokumentation benötigen beide Funktionen mindestens Windows XP. Sie funktionieren auch unter Windows 2000 SP 4. Es gibt sie als Ansi- und als Wide-Version. Im folgenden werden die Ansi-Versionen verwendet.

In einem ersten Aufruf mit Leerparametern liefert GetLogicalDriveStrings die Länge der Stringliste für die Laufwerksbuchstaben. Anschließend wird Speicher für die Liste reserviert. Mit dem zweiten Aufruf, welcher als Parameter die Länge und den Pointer auf den reservierten Speicher enthält, bekommt man eine Liste. Die Liste sieht zum Beispiel so aus:

C,:,\,#0,D,:,\,#0,E,:,\,#0,F,:,\,#0,G,:,\,#0,H,:,\,#0,I,:,\,#0,J,:,\,#0,K,:,\,#0

Mit der Funktion GetDriveType erhält man einen numerischen Wert, welcher den Typ des Laufwerkes wiedergibt:

Diesen Wert kann man entsprechend auswerten. In der Demo erfolgt die Ermittlung beispielsweise in einer Funktion:

function TOptDrives.ReadDrives: Integer;
{*****************************************************************************
*  Die optischen Laufwerke ermitteln.
}
var
  nBufferLength : Integer;
  pDriveBuffer  : PAnsiChar;
  pDrive        : PAnsiChar;
begin
  {
  ****************************************************************************
  *  Liste der optischen Laufwerke erstellen.
  }
  if Win32Platform = VER_PLATFORM_WIN32_NT
  then begin
    {
    *  Init
    }
    pDriveBuffer := nil;
    pDrive       := nil;
    {
    *  Vorhandene Laufwerksbuchstaben einlesen und Pointer übergeben.
    }
    nBufferLength := GetLogicalDriveStringsA(0, nil);
    if nBufferLength > 0
    then try
      GetMem(pDriveBuffer, nBufferLength * SizeOf(AnsiChar));
      if GetLogicalDriveStringsA(nBufferLength, pDriveBuffer) > 0
      then begin
        {
        *  Am Anfang Buffers steht das erste Laufwerk. Deshalb wird der
        *  Pointer des Buffers als Startpointer übergeben.
        }
        pDrive := pDriveBuffer;
        {
        *  Solange es einen Laufwerkseintrag gibt ...
        }
        while Length(pDrive) > 0
        do begin
          {
          *  den Typ des Laufwerks auf CD-ROM prüfen und ggfs eintragen.
          }
          if GetDriveTypeA(pDrive) = DRIVE_CDROM
          then begin
            SetLength(fDrive, Length(fDrive) + 1);
            fDrive[Length(fDrive) - 1].Drive  := pDrive;
            fDrive[Length(fDrive) - 1].Letter := pDrive[0];
          end;
          {
          *  Da die Laufwerkstrings mit einer #0 getrennt hintereinander
          *  stehen, wird der Pointer um die Länge des Strings und des Trenn-
          *  zeichens erhöht.
          }
          inc(pDrive, lStrLenA(pDrive) + 1);
        end;
      end;
    finally
      {
      *  Reservierten Speicher wieder freigeben.
      }
      FreeMem(pDriveBuffer);
      pDriveBuffer := nil;
      pDrive       := nil;
    end;
  end;
  Result := Length(fDrive);
end;

Das Ergebnis des Beispiels sieht so aus:

Drive Letter (podDriveLetter.7z - 225 kb) MD5 (1 kb). Stand: 28. April 2013

Änderungen an der Demo

28.04.2013Kleine Überarbeitung und neuer Name.
04.04.2013Überarbeitung.

Laufwerke > Buchstaben > Zähler