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 String) As 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