在一些软件中,我们会发现,当软件运行到需要向A驱读写文件时,它会自动对A驱进行检测。如果用户没有按要求在A驱插入磁盘,程序会提示用户将磁盘插入到A驱中;如果需要向A驱进行写文件,而这时A驱里的磁盘“写保护”了,程序无法向其写文件,程序也会提示用户去掉磁盘的“写保护”。 这种智能化的提示功能能否在VB中实现呢?答案是肯定的! 用VB写过程序的人都应该知道,在VB中有一个非常有用的语句:ON ERROR 其作用就是启动一个错误处理程序并指定该子程序在一个过程中的位置;也可用来禁止一个错误处理程序。 其语法: On Error GoTo line On Error Resume Next On Error GoTo 0 On Error 语句的语法可以具有以下任何一种形式: 语 句 描 述 on Error GoTo line 启动错误处理程序,且该例程从必要的 line 参数中指定的 line 开始。line 参数可以是任何行标签或行号。如果发生一个运行时错误,则控件会跳到 line,激活错误处理程序。指定的 line 必须在一个过程中,这个过程与 On Error 语句相同; 否则会发生编译时间错误。 On Error Resume Next 说明当一个运行时错误发生时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行。访问对象时要使用这种形式而不使用on Error GoTo。 On Error GoTo 0 禁止当前过程中任何已启动的错误处理程序。 有了这个ON ERROR 语句,我们就可以在其启动的错误处理程序中对错误号进行检测,由此可以得知A驱是否有磁盘以及其磁盘是否写保护。 下面以一个简单的例子来说明在VB中用ON ERROR语句来检测A驱是否有盘或其磁盘是否写保护。 在需要向A驱进行读写操作的模块头部写上下面这行代码: On Error GoTo DiskErr 红色的DiskErr是错误处理程序的开始标识,你可以任意设定。接下来就写对A驱进行读写的程序代码,直到对所有需要处理的代码写完。在其最后加上下面这行代码: Exit Sub 这行代码的作用是防止程序直接进入错误处理子程序。接下来写错误处理程序: DiskErr: Select Case Err.Number Case 52, 71 'A驱无盘 If MsgBox("A驱没有磁盘!" & vbCrLf & "请在你的A驱插入软盘后再试!" & vbCrLf, vbOKCancel, "A驱错误!") = vbOK Then Resume '返回到出错的语句重新处理 Else On Error Resume Next '忽略错误 End If Case 70 'A盘写保护 If MsgBox("请打开A盘写保护!", vbOKCancel, "A驱写入错误!") = vbOK Then Resume Else On Error Resume Next End If Case Else MsgBox "错误号:" & Err.Number & vbCrLf & "错误内容:" & Error, , "错误" End Select 如此以来,你的程序就有了本文开头所说的智能提示功能了。
试试这个Declare Function GetVolumeInformation Lib _ "kernel32" Alias "GetVolumeInformationA" _ (ByVal lpRootPathName As String, _ ByVal lpVolumeNameBuffer As String, _ ByVal nVolumeNameSize As Long, _ lpVolumeSerialNumber As Long, _ lpMaximumComponentLength As Long, _ lpFileSystemFlags As Long, _ ByVal lpFileSystemNameBuffer As String, _ ByVal nFileSystemNameSize As Long) As LongDeclare Function GetDriveType Lib "kernel32" _ Alias "GetDriveTypeA" (ByVal nDrive As String) As LongPublic Const DRIVE_CDROM = 5 使用: Dim VolName As String, FSys As String, erg As Long Dim VolNumber As Long, MCM As Long, FSF As Long Dim Drive As String, DriveType As Long VolName = Space(127) FSys = Space(127) Drive = "F:\" 'Enter the driverletter you want DriveType& = GetDriveType(Drive$) erg& = GetVolumeInformation(Drive$, VolName$, 127&, _ VolNumber&, MCM&, FSF&, FSys$, 127&) Print "分区名称:" & vbTab & VolName$ Print "序列号:" & vbTab & VolNumber& Print "最大文件名称长:" & vbTab & vbTab & MCM& Print "文件系统标志:" & vbTab & vbTab & FSF& Print "文件系统名称:" & vbTab & FSys$ Print "类型:" & vbTab & DriveType&; 'Is the drive a CDROM, if so, check for a CD If DriveType& = DRIVE_CDROM Then Print " (CDROM, "; If erg& = 0 Then Print "没有 CD )" Else Print "有 CD )" End If Else Print " (非 CDROM)" End If
Sub ShowDriveList() Dim fs, d, dc, s, n, t Set fs = CreateObject("Scripting.FileSystemObject") Set dc = fs.Drives For Each d In dc Select Case d.DriveType Case 0: t = "Unknown" Case 1: t = "Removable" Case 2: t = "Fixed" Case 3: t = "Network" Case 4: t = "CD-ROM" Case 5: t = "RAM Disk" End Select s = "Drive " & d.DriveLetter & ": - " & t If d.IsReady Then s = s & vbCrLf & "Drive is Ready." Else s = s & vbCrLf & "Drive is not Ready." End If MsgBox s Next End Sub
这种智能化的提示功能能否在VB中实现呢?答案是肯定的!
用VB写过程序的人都应该知道,在VB中有一个非常有用的语句:ON ERROR
其作用就是启动一个错误处理程序并指定该子程序在一个过程中的位置;也可用来禁止一个错误处理程序。
其语法:
On Error GoTo line
On Error Resume Next
On Error GoTo 0 On Error
语句的语法可以具有以下任何一种形式:
语 句 描 述
on Error GoTo line 启动错误处理程序,且该例程从必要的 line 参数中指定的 line 开始。line 参数可以是任何行标签或行号。如果发生一个运行时错误,则控件会跳到 line,激活错误处理程序。指定的 line 必须在一个过程中,这个过程与 On Error 语句相同; 否则会发生编译时间错误。
On Error Resume Next 说明当一个运行时错误发生时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行。访问对象时要使用这种形式而不使用on Error GoTo。
On Error GoTo 0 禁止当前过程中任何已启动的错误处理程序。 有了这个ON ERROR 语句,我们就可以在其启动的错误处理程序中对错误号进行检测,由此可以得知A驱是否有磁盘以及其磁盘是否写保护。
下面以一个简单的例子来说明在VB中用ON ERROR语句来检测A驱是否有盘或其磁盘是否写保护。
在需要向A驱进行读写操作的模块头部写上下面这行代码:
On Error GoTo DiskErr
红色的DiskErr是错误处理程序的开始标识,你可以任意设定。接下来就写对A驱进行读写的程序代码,直到对所有需要处理的代码写完。在其最后加上下面这行代码:
Exit Sub
这行代码的作用是防止程序直接进入错误处理子程序。接下来写错误处理程序:
DiskErr:
Select Case Err.Number
Case 52, 71 'A驱无盘
If MsgBox("A驱没有磁盘!" & vbCrLf & "请在你的A驱插入软盘后再试!" & vbCrLf, vbOKCancel, "A驱错误!") = vbOK Then
Resume '返回到出错的语句重新处理
Else
On Error Resume Next '忽略错误
End If
Case 70 'A盘写保护
If MsgBox("请打开A盘写保护!", vbOKCancel, "A驱写入错误!") = vbOK Then
Resume
Else
On Error Resume Next
End If
Case Else MsgBox "错误号:" & Err.Number & vbCrLf & "错误内容:" & Error, , "错误"
End Select
如此以来,你的程序就有了本文开头所说的智能提示功能了。
"kernel32" Alias "GetVolumeInformationA" _
(ByVal lpRootPathName As String, _
ByVal lpVolumeNameBuffer As String, _
ByVal nVolumeNameSize As Long, _
lpVolumeSerialNumber As Long, _
lpMaximumComponentLength As Long, _
lpFileSystemFlags As Long, _
ByVal lpFileSystemNameBuffer As String, _
ByVal nFileSystemNameSize As Long) As LongDeclare Function GetDriveType Lib "kernel32" _
Alias "GetDriveTypeA" (ByVal nDrive As String) As LongPublic Const DRIVE_CDROM = 5
使用:
Dim VolName As String, FSys As String, erg As Long
Dim VolNumber As Long, MCM As Long, FSF As Long
Dim Drive As String, DriveType As Long
VolName = Space(127)
FSys = Space(127)
Drive = "F:\" 'Enter the driverletter you want
DriveType& = GetDriveType(Drive$)
erg& = GetVolumeInformation(Drive$, VolName$, 127&, _
VolNumber&, MCM&, FSF&, FSys$, 127&)
Print "分区名称:" & vbTab & VolName$
Print "序列号:" & vbTab & VolNumber&
Print "最大文件名称长:" & vbTab & vbTab & MCM&
Print "文件系统标志:" & vbTab & vbTab & FSF&
Print "文件系统名称:" & vbTab & FSys$
Print "类型:" & vbTab & DriveType&;
'Is the drive a CDROM, if so, check for a CD
If DriveType& = DRIVE_CDROM Then
Print " (CDROM, ";
If erg& = 0 Then
Print "没有 CD )"
Else
Print "有 CD )"
End If
Else
Print " (非 CDROM)"
End If
Dim fs, d, dc, s, n, t
Set fs = CreateObject("Scripting.FileSystemObject")
Set dc = fs.Drives
For Each d In dc
Select Case d.DriveType
Case 0: t = "Unknown"
Case 1: t = "Removable"
Case 2: t = "Fixed"
Case 3: t = "Network"
Case 4: t = "CD-ROM"
Case 5: t = "RAM Disk"
End Select
s = "Drive " & d.DriveLetter & ": - " & t
If d.IsReady Then
s = s & vbCrLf & "Drive is Ready."
Else
s = s & vbCrLf & "Drive is not Ready."
End If
MsgBox s
Next
End Sub