用户登录  |  用户注册
首 页 ┆ 商业源码 ┆ 原创产品 ┆ 编程论坛
当前位置:PB创新网 → 文章中心 → 编程技巧 → Delphi

检测软盘或光盘是否有变化

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 20:20:07
一般情况下,不同的软盘或光盘具有不同的卷标号,因此, 我们可以通过检测卷标号的变化,来确定软盘或光盘是否更换过。恰好,Windows API 中提供了GetVolumeInformation函数来获取软盘、硬盘和光盘的卷标号,为我们实现此项功能提供了方便。

    函数原型:

    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;

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网【ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:6,312.50000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号