Contributor: PAUL SOBOLIK
3.01 How does one retrieve the volume and the serial number of a harddisk
or floppy with Delphi?
The following source code was provided to DELPHI-L by Paul Sobolik

---
unit VolInfo;
interface
uses Windows;
type
 TFSFlag = (FSCaseIsPreserved, FSCaseSensitive, FSUnicodeStoredOnDisk,
 FSPersistentACLS, FSVolIsCompressed, FSFileCompression);
 TFSFlags = set of TFSFlag;
 TVolumeInfo = record
 VolumeName: String;
 VolumeSN: DWord;
 MaxComponent: DWord;
 FSFlags: TFSFlags;
 FSName: String;
 end;
function GetVolumeInfo(rootPath: String; var vi: TVolumeInfo): Boolean;
implementation
{
function GetVolumeInformation(
 lpRootPathName: PChar;
 lpVolumeNameBuffer: PChar;
 nVolumeNameSize: DWORD;
 lpVolumeSerialNumber: PDWORD;
 var lpMaximumComponentLength,
 lpFileSystemFlags: DWORD;
 lpFileSystemNameBuffer: PChar;
 nFileSystemNameSize: DWORD): BOOL; stdcall;
}
function GetVolumeInfo(rootPath: String; var vi: TVolumeInfo): Boolean;
type
 TCharBuffer = array[0..255] of Char;
var
 flags, sn, mc: DWord;
 bufVolumeName, bufFSName: TCharBuffer;
begin
 with vi do begin
 result := GetVolumeInformation(PChar(rootPath),
 @bufVolumeName, sizeof(bufVolumeName),
 @sn, mc, flags,
 @bufFSName, sizeof(bufFSName));
 FSFlags := [];
 if result then begin
 VolumeName := bufVolumeName;
 VolumeSN := sn;
 MaxComponent := mc;
 FSName := bufFSName;
 if flags and FS_CASE_IS_PRESERVED  0 then FSFlags := FSFlags +
[FSCaseIsPreserved];
 if flags and FS_CASE_SENSITIVE  0 then FSFlags := FSFlags +
[FSCaseSensitive];
 if flags and FS_UNICODE_STORED_ON_DISK  0 then FSFlags := FSFlags
+
[FSUnicodeStoredOnDisk];
 if flags and FS_PERSISTENT_ACLS  0 then FSFlags := FSFlags +
[FSPersistentACLS];
 if flags and FS_VOL_IS_COMPRESSED  0 then FSFlags := FSFlags +
[FSVolIsCompressed];
 if flags and FS_FILE_COMPRESSION  0 then FSFlags := FSFlags +
[FSFileCompression];
 end else begin
 VolumeName := '';
 VolumeSN := 0;
 MaxComponent := 0;
 FSName := '';
 end;
 end;
end;
end.


AltStyle によって変換されたページ (->オリジナル) /