用 VB 打开任意盘(硬盘/U盘/光盘)的文件. (转)

用 VB 打开任意盘(硬盘/U盘/光盘)的文件. (转)[@more@]

程序打包移植的时候,需要用到 光盘/U盘 。在不知道机子上的光盘的盘符是多少,或不知道盘符的类别和盘符的总数的话。

......... 可以用如下方法来判断 .........

要用到的 api 描述:

返回机子上的所有盘符

GetLogicalDriveStrings 

VB声明 Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long 说明 获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径 返回值 Long,装载到lpBuffer的字符数量(排除空中止字符)。如缓冲区的长度不够,不能容下路径,则返回值就变成要求的缓冲区大小。零表示失败。会设置GetLastError 参数表 参数类型及说明 nBufferLength Long,lpBuffer字串的长度 lpBuffer String,用于装载逻辑驱动器名称的字串。每个名字都用一个NULL字符分隔,在最后一个名字后面用两个NULL表示中止(空中止)

 

不同的盘类型可以用 GetDriveType 来判断.

GetDriveType

VB声明 Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long 说明 判断一个磁盘驱动器的类型 返回值 Long,如驱动器不能识别,则返回零。如指定的目录不存在,则返回1。如执行成功,则用下述任何一个常数指定驱动器类型:DRIVE_REMOVABLE, DRIVE_FIXED, DRIVE_REMOTE, DRIVE_CDROM 或 DRIVE_RamdISK 参数表 参数类型及说明 nDrive String,包含了驱动器根目录路径的一个字串

 

如下用打开光盘指定的里的文件做例子:

Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As LongXML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

 

Private Sub Form_Click()

  Dim StrDrive As String  '盘符串(A: C: D:...)

  Dim DriveID As String  '盘符(如:A:)

  StrDrive = String(100, Chr$(0))  '初始化盘符串

  Call GetLogicalDriveStrings(100, StrDrive) '返回盘符串

  Dim i As Integer

  '返回光盘盘符到数组

  For i = 1 To 100 Step 4  '注意这里是4

  DriveID = Mid(StrDrive, i, 3)  '枚举盘符

  If DriveID = Chr$(0) & Chr(0) & Chr(0) Then Exit For '没有盘符,即时退出循环

 

  If GetDriveType(DriveID) = 5 Then Call shellPro(DriveID)

  '如果枚举到的盘是CD-ROM,转到 ShellPro 子程序

  Next i

End Sub

 

'子程序:::::打开文件

Sub ShellPro(DrivePro As String)

 

 On Error GoTo Err_File:

  If Not IsEmptyCDROM(DrivePro) Then

  Shell (DrivePro & "Hello.exe")  '打开文件路径

  Unload Me

  End  '并结束本程序

  Else

  Debug.Print "CD-ROM is Empty"

  End If

Err_File:

  If Err.Description = "错语的文件名或号码" Then Exit Sub

End Sub

 

Function IsEmptyCDROM(sDrive As String)

  Dim s

 

  On Error GoTo ErrHandle

  s = Dir(sDrive + "*.*")

  IsEmptyCDROM = False

  Exit Function

ErrHandle:

  IsEmptyCDROM = True

End Function

 

注:以上代码可随意调用,修改... :)


请使用浏览器的分享功能分享到微信等