Es ist ja nicht das erste mal, daß die Entwicklung der
Hardware eine Modifizierung der Software verlangt und so sind Sie vielleicht auch schon
auf ein Problem gestoßen, daß Festplatten mit einer Kapazität von über 2GB mit der
bekannten, und in der Tipp DB auch schon beschriebenen API Funktion
"GetDiskFreeSpace" nicht korrekt erkannt werden.
Aber es gibt auch da Abhilfe, allerdings nur für Windows95B/98 und WinNT4, und zwar in
Form einer "neuen" API Funktion "GetDiskFreeSpaceEx".
Für ein Demoprojekt benötigen wir also erstemal die API Funktion und eine Typdefinition.
Allgemein/Deklarationen
Private Declare Function GetDiskFreeSpaceEx Lib "Kernel32" Alias
"GetDiskFreeSpaceExA" ( _
ByVal lpRootPathName As String, _
lpFreeBytesAvailableToCaller As ULARGE_INTEGER, _
lpTotalNumberOfBytes As ULARGE_INTEGER, _
lpTotalNumberOfFreeBytes As ULARGE_INTEGER) _
As Long
Private Type ULARGE_INTEGER
Integer_64Bit(0 To 7) As Byte
End Type
Außerdem eine Aktion die das Ermitteln des freien und belegten Speicherplatzes auf einem
ausgewähltem Datenträger ermitteln. Wir wollen in unserem Beispiel, die Auswahl über
eine Combobox festlegen und die Aktion über einen Commandbutton auslösen, sowie das
Ergebnis in eine Listbox eintragen.
Also benötigen Sie Command1, List1 und Combo1 für unseren Test.
Form/Load
Combo1.AddItem "C:"
Combo1.AddItem "D:"
Combo1.AddItem "E:"
Combo1.AddItem "F:"
Combo1.AddItem "G:"
Combo1.AddItem "H:"
Combo1.Text = Combo1.List(0)
Command1/Click
Dim lRet As Long
Dim RootPath As String
Dim lFreeBytes As ULARGE_INTEGER, lTotalBytes As ULARGE_INTEGER, lTotalFreeBytes As
ULARGE_INTEGER
Dim buffer As Double, i As Integer
RootPath = Combo1.Text '"\\server\share"
lRet = GetDiskFreeSpaceEx(RootPath, lFreeBytes, lTotalBytes, lTotalFreeBytes)
List1.Clear
List1.AddItem "--- GetFreeDiskSpaceEx:"
buffer = 0
For i = 0 To 7
' Berechnung des Speicherplatzes aus den 8 8-Bit-Werten
buffer = buffer + lTotalBytes.Integer_64Bit(i) * 2 ^ (i * 8)
Next
List1.AddItem Int(buffer / 1000000) & " MB Speicherplatz gesamt [" &
MBFormat(buffer) & "]"
buffer = 0
For i = 0 To 7
buffer = buffer + lTotalFreeBytes.Integer_64Bit(i) * 2 ^ (i * 8)
Next
List1.AddItem Int(buffer / 1000000) & " MB Speicherplatz frei [" &
MBFormat(buffer) & "]"
Soweit hätten wir schon alles, vielleicht ist Ihnen aber schon aufgefallen, das hier mit
MBFormat eine weitere Funktion aufgerufen wird. Diese dient lediglich zum
Formatieren der ermittelten Werte.
Allgemein/MBFormat
Private Function MBFormat(ByVal NumBytes As Double) As String
Dim buffer As Double
Dim FormatString As String
buffer = NumBytes / 1000
If buffer < 1000 Then
FormatString = "KiloByte"
Else
buffer = buffer / 1000
If buffer < 1000 Then
FormatString = "MegaByte"
Else
buffer = buffer / 1000
If buffer < 1000 Then
FormatString = "GigaByte"
End If
End If
End If
MBFormat = Format(buffer, "0.000 " & Chr(34) & FormatString &
Chr(34))
End Function
Das war es nun, starten Sie Ihr Projekt mit F5 und ermitteln Sie die Speicherwerte eines
Datenträgers. Wenn Sie wollen können Sie ja für einen direkten Vergleich die alte
Funktion GetFreeDiskSpace in Ihr Projekt mit einbauen. |