Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
' applications, but you may not reproduce
' or publish this code on any web site,
' online service, or distribute as source
' on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private 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 Long
Private Sub Form_Load()
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Command1_Click()
Dim PathName As String
Dim DrvVolumeName As String
Dim DrvSerialNo As String
'the drive to check
PathName$ = "d:\"
rgbGetVolume PathName, DrvVolumeName, DrvSerialNo
'show the results
Print
Print " Drive Statistics for ", ": "; UCase$(PathName)
Print
Print " Volume Label", ": "; DrvVolumeName
Print " Volume Serial No", ": "; DrvSerialNo
End Sub
Private Sub rgbGetVolume(PathName As String, _
DrvVolumeName As String, _
DrvSerialNo As String)
'create working variables
'to keep it simple, use dummy variables for info
'we're not interested in right now
Dim r As Long
Dim pos As Integer
Dim hword As Long
Dim HiHexStr As String
Dim lword As Long
Dim LoHexStr As String
Dim VolumeSN As Long
Dim MaxFNLen As Long
Dim UnusedStr As String
Dim UnusedVal1 As Long
Dim UnusedVal2 As Long
'pad the strings
DrvVolumeName = Space$(14)
UnusedStr = Space$(32)
'do what it says
r = GetVolumeInformation(PathName, _
DrvVolumeName, _
Len(DrvVolumeName), _
VolumeSN&, _
UnusedVal1, UnusedVal2, _
UnusedStr, Len(UnusedStr))
'error check
If r = 0 Then Exit Sub
'determine the volume label
pos = InStr(DrvVolumeName, Chr$(0))
If pos Then DrvVolumeName = Left$(DrvVolumeName, pos - 1)
If Len(Trim$(DrvVolumeName)) = 0 Then DrvVolumeName = "(no label)"
'determine the drive volume id
hword = HiWord(VolumeSN)
lword = LoWord(VolumeSN)
HiHexStr = Format$(Hex(hword), "0000")
LoHexStr = Format$(Hex(lword), "0000")
DrvSerialNo = HiHexStr & "-" & LoHexStr
End Sub
Private Function HiWord(dw As Long) As Integer
HiWord = (dw And &HFFFF0000) \ &H10000
End Function
Private Function LoWord(dw As Long) As Integer
If dw And &H8000& Then
LoWord = dw Or &HFFFF0000
Else
LoWord = dw And &HFFFF&
End If
End Function |