ドライブの空き容量を調べるには

ドライブの空き容量を調べます。
キーワードは「GetDiskFreeSpaceEx()関数」。
GetDiskFreeSpaceEx()関数は、2GB以上のドライブの空き容量を取得する関数です。
2GB以下のドライブはGetDiskFreeSpace()関数を使って空き容量を取得します。


実行中の様子


Private Type ULARGE_INTEGER
    LowPart As Long
    HighPart As Long
End Type
'指定のディレクトリを含むディスクの空き容量を調べる
Private Declare Function GetDiskFreeSpaceEx Lib "kernel32.dll" Alias "GetDiskFreeSpaceExA" _
    (ByVal lpDirectoryName As String, lpFreeBytesAvailableToCaller As ULARGE_INTEGER, _
    lpTtoalNumberOfBytes As ULARGE_INTEGER, lpTtoalNumberOfFreeBytes As ULARGE_INTEGER) As Long

Private Sub DrawGraph() Dim lpFreeSpace As ULARGE_INTEGER Dim lpUsedSpace As ULARGE_INTEGER Dim lpTotalSpace As ULARGE_INTEGER Dim rc Me.Picture1.Cls rc = GetDiskFreeSpaceEx(Me.Drive1.Drive, lpUsedSpace, lpTotalSpace, lpFreeSpace) If rc Then Me.Text1(0).Text = Format(Int((lpTotalSpace.HighPart * 2 ^ 32 _ + lpTotalSpace.LowPart) / (1000 ^ 2)), "#,###") Me.Text1(1).Text = Format(Int((lpFreeSpace.HighPart * 2 ^ 32 _ + lpFreeSpace.LowPart) / (1000 ^ 2)), "#,###") Me.Picture1.Line (0, 0)-((lpFreeSpace.HighPart * 2 ^ 32 _ + lpFreeSpace.LowPart) / (lpTotalSpace.HighPart * 2 ^ 32 _ + lpTotalSpace.LowPart) * Me.Picture1.ScaleWidth, Me.Picture1.ScaleHeight), vbBlue, BF Me.Picture1.CurrentX = Int(Me.Picture1.ScaleWidth / 2) Me.Picture1.CurrentY = Int(Me.Picture1.ScaleHeight / 2) - 5 Me.Picture1.Print Int((lpFreeSpace.HighPart * 2 ^ 32 _ + lpFreeSpace.LowPart) / (lpTotalSpace.HighPart * 2 ^ 32 + lpTotalSpace.LowPart) * 100) & "%の空き" End If End Sub
Private Sub Drive1_Change() Call DrawGraph End Sub
Private Sub Picture1_Paint() Call DrawGraph End Sub
ダウンロード