这个问题我已经回答过了。
//faint,为什么不搜索一下?
GetDriveType()AvailableDrives :dword;    AvailableDrives := GetLogicalDrives;
    for i:= 0 to 25 do
      if GetBit(AvailableDrives,i+1)=1 then//如果驱动器存在
      begin
        DrivePath:=Char(Ord('A')+i)+':\';
        case GetDriveType(pchar(DrivePath)) of 
          DRIVE_FIXED :....//如果是硬盘
          DRIVE_CDROM :....//if Cd-rom,DrivePath就是光驱的盘符。
          ........
        end;
      end;

解决方案 »

  1.   

    function GetHDSerialNumber(Drv : String): String;
    var
      VolumeSerialNumber : DWORD;
      MaximumComponentLength : DWORD;
      FileSystemFlags : DWORD;
    begin
      if Drv[Length(Drv)] =':' then Drv := Drv + '\';
      GetVolumeInformation(pChar(Drv),
                           nil,
                           0,
                           @VolumeSerialNumber,
                           MaximumComponentLength,
                           FileSystemFlags,
                           nil,
                           0);
      Result := IntToHex(HiWord(VolumeSerialNumber), 4) +
                '-' +
                IntToHex(LoWord(VolumeSerialNumber), 4);
    end;