如何得到光驱的卷标?(已经知道盘符)(20分)

D

daisky

Unregistered / Unconfirmed
GUEST, unregistred user!
如何得到光驱的卷标?(已经知道盘符)
 
function TForm4.GetVolumeInformation( const Drive : Char ) : string;
var
lpRootPathName : PChar; // address of root directory of the file system
lpVolumeNameBuffer : PChar; // address of name of the volume
nVolumeNameSize : DWORD; // length of lpVolumeNameBuffer
lpVolumeSerialNumber : DWORD; // address of volume serial number
lpMaximumComponentLength : DWORD; // address of system's maximum filename length
lpFileSystemFlags : DWORD; // address of file system flags
lpFileSystemNameBuffer : PChar; // address of name of file system
nFileSystemNameSize : DWORD; // length of lpFileSystemNameBuffer
begin
GetMem( lpVolumeNameBuffer, MAX_PATH + 1 );
GetMem( lpFileSystemNameBuffer, MAX_PATH + 1 );
try
nVolumeNameSize := MAX_PATH + 1;
nFileSystemNameSize := MAX_PATH + 1;

lpRootPathName := PChar( Drive + ':/' );
if Windows.GetVolumeInformation( lpRootPathName,
lpVolumeNameBuffer,
nVolumeNameSize,
@lpVolumeSerialNumber,
lpMaximumComponentLength,
lpFileSystemFlags,
lpFileSystemNameBuffer,
nFileSystemNameSize ) then
begin
Result:=lpVolumeNameBuffer;
{ with Result do
begin
Name := lpVolumeNameBuffer;
SerialNumber := lpVolumeSerialNumber;
MaxComponentLength := lpMaximumComponentLength;
FileSystemFlags := lpFileSystemFlags;
FileSystemName := lpFileSystemNameBuffer;
end; }// with Result
end // if
else
begin
Result:='';
end; // else
finally
FreeMem( lpVolumeNameBuffer );
FreeMem( lpFileSystemNameBuffer );
end; // try
end;
 
喂!楼上的,不用那么多代码吧!

functionVolumeID(DriveChar:Char):string;
var
OldErrorMode:Integer;
NotUsed,VolFlags:DWORD;
Buf:array[0..MAX_PATH]ofChar;
begin
OldErrorMode:=SetErrorMode(SEM_FAILCRITICALERRORS);
try
Buf[0]:=#$00;
if GetVolumeInformation(PChar(DriveChar+':/'),Buf,DWORD(sizeof(Buf)),nil,NotUsed,VolFlags,nil,0) then
SetString(Result,Buf,StrLen(Buf))
else
Result:='';
if DriveChar<'a' then
Result:=AnsiUpperCaseFileName(Result)
else
Result:=AnsiLowerCaseFileName(Result);
Result:=Format('[%s]',[Result]);
finally
SetErrorMode(OldErrorMode);
end;
end;

调用:VolumeID('d:');
 
//检测CD-ROM,是否有光盘
GetMem(volname, 255);
GetMem(filesysname, 100);
for name :='C' to 'Z'do//循环检测A~Z
begin
drvname := name + ':';
CDtype := GetDriveType(PCHAR(@drvname[1])); //获得磁盘类型
if (CDtype = DRIVE_CDROM) then
begin
Memo1.Lines.Add('您的光驱盘符为[' + drvname + ']');
volname^ := Chr(0);
filesysname^ := Chr(0);
if ( not (GetVolumeInformation(PCHAR(@drvname[1]), volname, 250, LPDWORD(@sno), LPDWORD(@maxl)^, LPDWORD(@fileflag)^, filesysname,100))) then
Memo1.Lines.Add(drvname + '驱中没有发现光盘') //如果返回值为假
else //如果返回值为真
begin
Memo1.Lines.Add (drvname + '驱中光盘卷标为: [' + String(volname) + ']');
Memo1.Lines.Add (drvname + '驱中光盘序号为: [' + inttostr(sno) + ']');
end;
end;
end;
 
顶部