Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long Private Declare Function GetLogicalDrives Lib "kernel32" () As Long 下面,开始编写代码: 首先建立一个drivecount的函数,用来返回磁盘驱动器的个数,代码如下: Public Function DriveCount() As Integer Dim BitMask As Long Dim j, i BitMask = GetLogicalDrives() For i = 0 To 24 If BitMask And 2 ^ i Then j = j + 1 End If Next i DriveCount = j End Function 之后,再建立一个函数,专门用来返回驱动器的名称,代码如下: Public Function LoadDrivenames(An_Array() As String) As Long Dim j, i Dim lpBuffer As String ReDim An_Array(128) As String lpBuffer = Space$(1024) GetLogicalDriveStrings Len(lpBuffer), lpBuffer j = InStr(lpBuffer, Chr$(0)) Do While j > 0 An_Array(i) = Left$(lpBuffer, j - 1) i = i + 1 lpBuffer = Mid$(lpBuffer, j + 1) j = InStr(lpBuffer, Chr$(0)) Loop ReDim Preserve An_Array(DriveCount) End Function 这个函数中用一个数组An_Array()来存储磁盘驱动器的名称。 下面,再建立一个函数用来返回磁盘驱动器的类型,代码如下: Public Function Types(Optional sDrive As String) As String Select Case GetDriveType(sDrive) '注:此处必为"c:\",不能为"c" Case 0 Types = "UNKNOWN" Case 1 Types = "UNKNOWN" Case 2 Types = "DRIVE_REMOVABLIE" Case 3 Types = "DRIVE_FIXED" Case 4 Types = "DRIVE_REMOTE" Case 5 Types = "DRIVE_CDROM" Case 6 Types = "DRIVE_RAMDISK" Case Else Types = "ERROR" End Select End Function 注意:这个函数的参数sdrive:只能为如"c:\"形式的,而不能为"c"形式的。 下面就可以调用这几个函数,来获得我们想要的东西。 在command1_click事件中,加入以下代码: Private Sub Command1_Click() Dim a() As String '用来存储磁盘驱动器的名称,形式为"c:\"等 Dim i As Integer Form1.Cls '每次点击都刷新显示窗体,本程序是在窗体上显示的 Print "驱动器个数:" Print DriveCount '调用drivecount返回磁盘驱动器的个数 Call LoadDrivenames(a) '调用loaddrivename,以a为参数,返回驱动器名称 For i = 0 To DriveCount - 1 Print " "; Print a(i); Print " ---- "; Print Types(a(i)) '调用types,返回驱动器类型 Next i End Sub 好了,点一下run,就可以运行了,有一点需要说明,当装了虚拟光驱时,被虚拟的硬盘的类型也被认为是光盘驱动器,即Types = "DRIVE_CDROM".
个人专栏:http://www.csdn.net/develop/author/netauthor/lihonggen0/
------------------------------------------------------------------
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function GetLogicalDrives Lib "kernel32" () As Long
下面,开始编写代码:
首先建立一个drivecount的函数,用来返回磁盘驱动器的个数,代码如下:
Public Function DriveCount() As Integer
Dim BitMask As Long
Dim j, i
BitMask = GetLogicalDrives()
For i = 0 To 24
If BitMask And 2 ^ i Then
j = j + 1
End If
Next i
DriveCount = j
End Function
之后,再建立一个函数,专门用来返回驱动器的名称,代码如下:
Public Function LoadDrivenames(An_Array() As String) As Long
Dim j, i
Dim lpBuffer As String
ReDim An_Array(128) As String
lpBuffer = Space$(1024)
GetLogicalDriveStrings Len(lpBuffer), lpBuffer
j = InStr(lpBuffer, Chr$(0))
Do While j > 0
An_Array(i) = Left$(lpBuffer, j - 1)
i = i + 1
lpBuffer = Mid$(lpBuffer, j + 1)
j = InStr(lpBuffer, Chr$(0))
Loop
ReDim Preserve An_Array(DriveCount)
End Function
这个函数中用一个数组An_Array()来存储磁盘驱动器的名称。
下面,再建立一个函数用来返回磁盘驱动器的类型,代码如下:
Public Function Types(Optional sDrive As String) As String
Select Case GetDriveType(sDrive) '注:此处必为"c:\",不能为"c"
Case 0
Types = "UNKNOWN"
Case 1
Types = "UNKNOWN"
Case 2
Types = "DRIVE_REMOVABLIE"
Case 3
Types = "DRIVE_FIXED"
Case 4
Types = "DRIVE_REMOTE"
Case 5
Types = "DRIVE_CDROM"
Case 6
Types = "DRIVE_RAMDISK"
Case Else
Types = "ERROR"
End Select
End Function
注意:这个函数的参数sdrive:只能为如"c:\"形式的,而不能为"c"形式的。
下面就可以调用这几个函数,来获得我们想要的东西。
在command1_click事件中,加入以下代码:
Private Sub Command1_Click()
Dim a() As String '用来存储磁盘驱动器的名称,形式为"c:\"等
Dim i As Integer
Form1.Cls '每次点击都刷新显示窗体,本程序是在窗体上显示的
Print "驱动器个数:"
Print DriveCount '调用drivecount返回磁盘驱动器的个数
Call LoadDrivenames(a) '调用loaddrivename,以a为参数,返回驱动器名称
For i = 0 To DriveCount - 1
Print " ";
Print a(i);
Print " ---- ";
Print Types(a(i)) '调用types,返回驱动器类型
Next i
End Sub 好了,点一下run,就可以运行了,有一点需要说明,当装了虚拟光驱时,被虚拟的硬盘的类型也被认为是光盘驱动器,即Types = "DRIVE_CDROM".
sorry,一失手落下你了,抱歉抱歉