Option Explicit
Option Private Module
' ---------------------------------------------------------
' Funktion FreeDiskSpaceEx
' Eingestellt von: Andre Schau
' Datum: 5. Juno 2011
' Kommentar:
' Parameter: strDrive
' Rückgabe: freier Speicherplatz
' weitere Rückgaben möglich
' siehe API-Argumente
' weitere benoetigte Programme und Funktionen
' API-Funktion: GetDiskFreeSpaceEx
' Aufruf:
' Sub Call_FreeDiskSpaceEx()
' MsgBox "Freier Speicherplatz auf C: " & FreeDiskSpaceEx("c:") & " Bytes"
' End Sub

' Deklarierung der API-Funktion
Private Declare Function GetDiskFreeSpaceEx _
        Lib "kernel32" _
        Alias "GetDiskFreeSpaceExA" _
        (ByVal lpstrdriveName As String, _
         lpFreeBytesAvailableToCaller As ULARGE_INTEGER, _
         lpTotalNumberOfBytes As ULARGE_INTEGER, _
         lpTotalNumberOfFreeBytes As ULARGE_INTEGER) _
        As Long

'Deklarierung des Typs ULARGE_INTEGER
Private Type ULARGE_INTEGER
        Integer_64Bit(0 To 7) As Byte
End Type

' Aufruf
Sub Call_FreeDiskSpaceEx()
MsgBox "Freier Speicherplatz auf C: " & FreeDiskSpaceEx("c:") & " Bytes"
End Sub

Private Function FreeDiskSpaceEx(ByVal strdrive As StringAs Double
'Variablendeklaration
'Double
Dim dBuffer#
'Integer
Dim iCnt%
'ULARGE_INTEGER
Dim uiFreeB As ULARGE_INTEGER
Dim uiTotalB As ULARGE_INTEGER
Dim uiTotalFreeB As ULARGE_INTEGER
'API-Argumente:
'Laufwerk, freie Bytes (user), totale Bytes (user), total freie Bytes
'API-Aufruf
GetDiskFreeSpaceEx strdrive, uiFreeB, uiTotalB, uiTotalFreeB
'Schleife ueber alle 8-Bit-Werte
For iCnt = 0 To 7
  ' Berechnung des Speicherplatzes aus den 8-Bit-Werten
  dBuffer = dBuffer + uiTotalFreeB.Integer_64Bit(iCnt) * 2 ^ (iCnt * 8)
Next
'Rueckgabewert uebernehmen
FreeDiskSpaceEx = dBuffer
End Function