![]() |
|
在编程时我们经常需要用到系统中可用磁盘的一些信息,在Visual FoxPro中可用DiskSpace()、Sys(2022)得到剩余空间和簇大小,但如果需要磁盘组织的其他一些信息如卷标、序列号等,这些信息直接使用VFP提供的函数显然是无法得到的。本文介绍访问动态链接库,调用DLL函数GetLogicalDriverStrings、GetDriveType、GetVolumeInformation和GetDiskFreeSpace来获得磁盘组织的重要信息的方法,以便在文件创建、软件注册时加以应用。这四个函数的主要功能如下:
GetLogicalDriverStrings: 用以获取可用磁盘代码(盘符),包括硬盘的逻辑分区。
GetDriveType: 用以获得磁盘类型,以区别是软驱、硬盘、网络驱动器、CDROM还是RAM虚拟盘。
GetVolumeInformation: 用以获取包括磁盘卷标、序列号、文件名每个部分(如路径中“\”与“\”之间部分的最大长度)、文件系统的某些特性等与磁盘卷有关的信息。
GetDiskFreeSpace: 用以获取磁盘上每簇扇区数、每扇区字节数、剩余簇数、总簇数等与磁盘组织有关的信息。
这四个函数均包含在%SystemRoot%\System32\
Kernel32.dll中,在调用时,需先用DECLARE命令注册DLL函数,并指定参数的数目和类型,也可以在参数前添加“@”来强制参数按引用传递。函数的名称要区分大小写,并指定WIN32API为库名称。Visual FoxPro将到Kernel32.dll中自动查找被调用的32位Windows DLL函数。如图1所示,运行TEST表单即可扫描当前系统上所有可用盘符,并出现在盘符下拉框中。下面介绍其具体实现方法。
创建表单
创建表单并在Form的Activate过程中添加代码,添加的代码如下:
※ 获得当前系统上所有可用磁盘代码,并作为Form中盘符组合框的数值
PUBLIC sAllDrivers, sAvaiDsk
DECLARE INTEGER GetLogicalDriveStrings IN Win32api AS GetLogDsk INTEGER nBufferLength, STRING lpBuffer
IngRetVal=0
sAllDrivers = SPACE(128)
&&获得所有可用磁盘代码
lngRetVal = GetLogDsk(LEN(sAllDrivers), @sAllDrivers)
CLEAR DLLS
sAllDrivers=TRIM(sAllDrivers)
※ sAllDrivers=“A:\ B:\ C:\……”,盘符之间原用chr(0)分隔的,改用“,”间隔
sAllDrivers=CHRTRAN(sAllDrivers,CHR(0),“,”)
THISFORM.sAllDsk.VALUE=sAllDrivers
THISFORM.combo1.ADDITEM(sAllDrivers)
&& 将可用盘符添加到combo1的选项中.
在此可将不同磁盘类型对应的图标(或位图)添加到盘符符组合框combo1.picture属性中,如图1所示,图中可见带图标的组合下拉框列表,代码此略。
查询磁盘信息
如果要在盘符下拉框中选择任一可用盘,立即显示其结构信息,如图2所示,这需要在盘符组合框combo1的Click中添加如下代码:
strDrive=TRIM(THISFORM.combo1.VALUE)+“\”
DECLARE INTEGER GetDriveType IN win32api AS GetDrType STRING nDrive
DIMENSION DskType(5)
&& 下面判断磁盘类型
Dsktype(1)=“软盘”
&& GetDrType(strDrive)=2
>Dsktype(2)=“硬盘”
&& GetDrType(strDrive)=3
Dsktype(3)=“网络驱动器”
&& GetDrType(strDrive)=4
Dsktype(4)=“CDROM”
&& GetDrType(strDrive)=5
Dsktype(5)=“RAM虚拟驱动器”
&& GetDrType(strDrive)=6
THISFORM.text2.VALUE=DskType(GetDrType(strDrive)-1)
[1] [2]