Autor Beitrag
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 02.04.03 16:28 
Um den Namen, die Serieannummber und den Typ eines Laufwerks zu ermitteln genügt ein Aufruf der Funktion GetVolumeInformation. Die diese Funktion gleich mehrere Informationen über ein Laufwerk liefert habe ich ein Rekord und eine neuen Funktion gebastelt um die Arbeit einwenig zu erleichtern.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
Type
  tVolumeInfo = Record
      Drive: Char;
      Name: String;
      SerialNumber: DWord;
      FileSystemName: String;
    End;

Function GetVolumeInfo (aDrive: Char): tVolumeInfo;
Var
  OldErrorMode: Integer;
  Dummy1, Dummy2: DWord;
  VolumeNameBuf,
  FileSystemNameBuf: Array [0..MAX_PATH] of Char;
  VolumenSerialNumber: pDWord;

  Info: tVolumeInfo;
Begin
  With Info Do
    Begin
      Drive := aDrive;
      Name := '';
      SerialNumber := 0;
      FileSystemName := '';
    End;

  OldErrorMode := SetErrorMode (SEM_FAILCRITICALERRORS);
  Try
    If GetVolumeInformation (
        pChar (aDrive + ':\'),
        VolumeNameBuf, SizeOf (VolumeNameBuf),
        VolumenSerialNumber, Dummy1, Dummy2,
        FileSystemNameBuf, SizeOf (FileSystemNameBuf)
      )
    Then
      Begin
        Info.Name := VolumeNameBuf;
        Info.SerialNumber := VolumenSerialNumber^;
        Info.FileSystemName := FileSystemNameBuf;
      End;
  Finally
    SetErrorMode (OldErrorMode);
  End;

  Result := Info;
End;

In dieser Funktion benutze ich auch die SetErrorMode Funktion. Damit umgehe ich eine Abfrage wenn eventl. eine Diskette im Diskettelaufwerk oder eine CD im CD-Laufwerk nicht eingelegt ist.

Aufgerufen wird die Funktion so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Procedure TForm1.Button1Click (Sender: TObject);
Var
  Info: tVolumeInfo;
  Str: String;
Begin
  Info := GetVolumeInfo ('d');

  Str := 'Informationen über Laufwerk' + #32 + Info.Drive;
  Str := Str + #13#10#32#32 + 'Name: ' + Info.Name;
  Str := Str + #13#10#32#32 + 'Serial: ' + IntToStr (Info.SerialNumber);
  Str := Str + #13#10#32#32 + 'System: ' + Info.FileSystemName;

  MessageDlg (Str, mtInformation, [mbOK], 0);
End;