var VolumeSerialNumber: DWORD; MaximumComponentLength: DWORD; FileSystemFlags: DWORD; SerialNumber: string; DvrVolume: array[0..255] of Char; begin GetVolumeInformation('g:/', DvrVolume, SizeOf(DvrVolume), @VolumeSerialNumber, MaximumComponentLength, FileSystemFlags, nil, 0); ShowMessageFmt('%d',[FileSystemFlags]); end; Delphi 利用GetVolumeInformation函数来获取硬盘的序列号 函数声明: BOOL GetVolumeInformation( LPCTSTR lpRootPathName, // 与获取信息卷的根路径 LPTSTR lpVolumeNameBuffer, // 用于装在卷名的一个字符串 DWORD nVolumeNameSize, // 字符串的长度 LPDWORD lpVolumeSerialNumber, // 用于装载磁盘卷序列号的变量 LPDWORD lpMaximumComponentLength, // 指定一个变量,用于装载文件名每一部分的长度 LPDWORD lpFileSystemFlags, // 用于装载一个或多个二进制位标志的长度 LPTSTR lpFileSystemNameBuffer, // 指定一个缓冲区 DWORD nFileSystemNameSize // lpFileSystemNameBuffer,的长度 ); function DiskInDrive(Drive: Char): Boolean; var ErrorMode: word; begin { make it upper case } if Drive in ['a'..'z'] then Dec(Drive, $20); { make sure it's a letter } if not (Drive in ['A'..'Z']) then raise EConvertError.Create('Not a valid drive ID'); { turn off critical errors } ErrorMode := SetErrorMode(SEM_FailCriticalErrors); try { drive 1 = a, 2 = b, 3 = c, etc. } if DiskSize(Ord(Drive) - $40) = -1 then Result := False else Result := True; finally { restore old error mode } SetErrorMode(ErrorMode); end; end;