检测软盘或光盘是否有变化
函数原型:
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName,
LPTSTR lpVolumeNameBuffer,
DWORD nVolumeNameSize,
LPDWORD lpVolumeSerialNumber,
LPDWORD lpMaximumComponentLength,
LPDWORD lpFileSystemFlags,
LPTSTR lpFileSystemNameBuffer,
DWORD nFileSystemNameSize
);
有关的参数说明:
1.lpRootPathName:指定测试驱动器的根目录的名称,若为null时,则指定为当前目录所在驱动器的根目录名称。
2.LpVolumeNameBuffer:指定存放驱动器卷标名称缓冲区的首址。不需要时,设为nil。
3.nVolumeNameSize:指定存放驱动器卷标名称缓冲区的大小。不需要时,设为0。
4.LpVolumeSerialNumber:指定存放驱动器卷标号缓冲区的首址。不需要时,设为nil。
5.LpMaximumComponentLength:指明驱动器可支持的文件名的最大长度。必须有参数。
6.LpFileSystemFlags:指明文件系统特性标志,如是压缩方式还是非压缩方式等等。必须有参数。
7.LpFileSystemNameBuffer:指明文件系统类型名称的存放缓冲区首址,FAT或NTFS等等。不需要时,设为nil。
8.NFileSystemNameSize: 指明文件系统类型名称的存放缓冲区大小。不需要时,设为0。
应用举例:
检测软盘是否发生变化。
(1)建立一新工程。
(2)在窗体FORM1中添加两个LABEL1组件,一个COMBOBOX组件和一个EDIT1组件。将COMBOBOX组件的ITEMS属性设置为“A:”。如
(3)在Tform1定义中增加一个新的函数声明信息,定义一个变量。如下:
type
Tform1=class(Tform)
...
private
//定义新函数,该函数用来获取一个驱动器的卷标号。
function GetDiskVolID(DriveName:String):Dword; public
...
var
// 定义一个变量,用来存放前一次测试A盘获取的卷标号
saveolda:string;
(4)函数GetDiskVolId定义体如下:
function GetDiskVolId(DriveName:String):Dword;
var
p1,p2:dword;
p3:dword;//指向卷标号存放的地址
begin
new(p3);
//调用getvolumeinformation函数获取卷标号
getvolumeinformation(pchar(drivename+''\''),nil,0,p3,p1,p2,nil,0);
result:=p3^;
dispose(p3);
end;
(5)在combobox组件的onchange 事件中调用GetDiskVolID函数。
Procedure tform1.Combobox1change(sender:tobject);
Var
savenewa:string//定义变量,存放最新测试A盘获取的卷标号
Begin
savenewa:=inttostr(GetDiskVolID(combobox1.Items[combobox1.Itemindex]));
if savenewa <>'''' then //判断是否取得卷标号
if saveolda <> savenewa then //比较前后卷标号是否发生改变
begin
//提示信息
Application.MessageBox(''A盘发生更换!'',''磁盘打开错误!'', MB_DEFBUTTON1);
edit1.text:=savenewa;
saveolda:=savenewa;
end;
End;