磁碟資訊執行個體說明
在本程式中,我們將產生一個能夠得到當前磁碟資訊的應用程式,跟右鍵點擊磁碟“屬性”得到的結果相似。運行後,選擇磁碟後,可以得到當前磁碟的序號、卷標、檔案類型、已用空間、未用空間、磁碟容量等資訊
技術要點
l 判斷磁碟機類型
l 取得磁碟的相關資訊
l 取得磁碟的使用空間、總空間
實現過程 ■ 建立項目
開啟Visual Studio.NET,選擇“建立項目”,在項目類型視窗中選擇“Visual Basic項目”,在模板視窗中選擇“Windows應用程式”,在名稱域中輸入“DiskInfo”,然後選擇儲存路徑。單擊“確認”。
■ 添加控制項
向當前表單上添加十六個Label控制項,一個Picture控制項,一個ComboBox控制項,一個Line控制項。
■ 設定屬性
根據表單的介面,將說明性的Label控制項的Text屬性改為和介面一致即可。在表96-1中列出了一些主要屬性,其餘屬性讀者可以參考光碟片。
表96-1 表單及控制項的屬性值
表單/控制項
屬性
值
Label10
Text
BackColor
&H000000FF
Label11
Text
Value
&H00FF0000
其他Label控制項
Autosize
True
Text
跟介面一致
■ 添加代碼
下列代碼是在模組中添加的
Option Strict Off
Module Module1
Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Integer
Public Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, ByRef lpVolumeSerialNumber As Integer, ByRef lpMaximumComponentLength As Integer, ByRef lpFileSystemFlags As Integer, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Integer) As Integer
Public Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, ByRef lpSectorsPerCluster As Integer, ByRef lpBytesPerSector As Integer, ByRef lpNumberOfFreeClusters As Integer, ByRef lpTotalNumberOfClusters As Integer) As Integer
End Module
下列代碼是在表單中添加的
Private Sub Combo1_SelectedIndexChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Combo1.SelectedIndexChanged
Dim buff As String
Dim retSerial, retRoot, retVolume1, retFlag As String
Dim retFSNbuffer As String
Dim lpBytesPerSector, lppercluster, lpfree As Integer
Dim lptotal As Integer
Dim freespace As Long
Dim totalspace As Double
Dim usespace As Double
Dim startang As Single
Dim endang As Single
Dim x As Integer
Dim retMaxLength As Integer
On Error Resume Next
buff = Combo1.Text & ":"
' 判斷磁碟機類型
x = GetDriveType(buff)
Select Case x
Case 2
lbldrivetype.Text = " 軟碟機"
Case 3
lbldrivetype.Text = "硬碟 "
Case 4
lbldrivetype.Text = " 網路磁碟機"
Case 5
lbldrivetype.Text = " CD - ROM磁碟機"
Case 6
lbldrivetype.Text = " RAMDISK磁碟機"
Case Else
lbldrivetype.Text = " "
End Select
' 得到卷標名稱
retVolume1 = New String(Chr(0), 255)
retFSNbuffer = New String(Chr(0), 255)
x = GetVolumeInformation(buff, retVolume1, Len(retVolume1), retSerial, retMaxLength, retFlag, retFSNbuffer, Len(retFSNbuffer))
'retVolume = retVolume & Chr(0)
lblFileSystem.Text = retFSNbuffer
lblvolume.Text = retVolume1
If lblvolume.Text = "" Then
lblvolume.Text = "無卷標"
End If
' 計算磁碟剩餘空間、已用空間和總空間
x = GetDiskFreeSpace(buff, lppercluster, lpBytesPerSector, lpfree, lptotal)
freespace = lpfree * lpBytesPerSector * lppercluster
totalspace = lptotal * lpBytesPerSector * CDbl(lppercluster)
'totalspace = totalspace * 10
lblUnusedSpace.Text = CStr(freespace) & "位元組 " & CStr(Int(freespace / 1024 / 1024)) & " MB"
lblTotalVolume.Text = CStr(totalspace) & " 位元組 " & CStr(Int(totalspace / 1024 / 1024)) & " MB"
lblUsedSpace.Text = CStr(totalspace - freespace) & " 位元組 " & CStr(Int((totalspace - freespace) / 1024 / 1024)) & " MB"
lblintro.Text = "磁碟機" & Combo1.Text
End Sub
' 表單啟動時,自動將當前系統上的磁碟添加到Combo控制項中
Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
Dim x As Integer
Dim i As Short
Dim buff As String
For i = 65 To 90
buff = Chr(i) & ":"
x = GetDriveType(buff)
If x > 1 Then
Combo1.Items.Add(Chr(i))
End If
Next
Combo1.Text = "C"
Call Combo1_SelectedIndexChanged(Combo1, New System.EventArgs())
End Sub
■ 運行程式
單擊菜單“調試|啟動”或單擊 表徵圖運行程式。
小結
我們通過使用這三個GetDriveType(),etVolumeInformation(),etDiskFreeSpace()API函數來得到有關磁碟的資訊。其中,GetDriveType()函數用於獲得有關磁碟機類型的資訊;GetVolumeInformation()函數用於獲得磁碟卷標的一些資訊;GetDiskFreeSpace()用於獲得磁碟剩餘空間和總空間資訊。