用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置: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:指明文件系统类型名称的存放缓冲区首址FATNTFS等等。不需要时,设为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号