HERBERS Excel-Forum - die Beispiele

Thema: Speicherinformationen ermitteln

Home

Gruppe

API

Problem

Die Speicherinformationen auszuwählender Laufwerke werden ermittelt.

Lösung
Geben Sie den nachfolgenden Code in ein Standardmodul ein und weisen Sie ihn einer Schaltfläche zu.
StandardModule: Modul1

Private Declare Function GetDiskFreeSpace Lib "kernel32.dll" Alias _
  "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, _
  lpSectorsPerCluster As Long, lpBytesPerSector As Long, _
  lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long
Private Declare Function GetDiskFreeSpaceEx Lib "kernel32.dll" Alias _
  "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, _
  lpFreeBytesAvailableToCaller As ULARGE_INTEGER, _
  lpTotalNumberOfBytes As ULARGE_INTEGER, _
  lpTotalNumberOfFreeBytes As ULARGE_INTEGER) As Long
Private Declare Function GetVersionEx Lib "kernel32.dll" Alias "GetVersionExA" _
  (lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function GetLogicalDriveStrings Lib "kernel32.dll" Alias _
  "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, _
  ByVal lpBuffer As String) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
  (Destination As Any, Source As Any, ByVal Length As Long)

Private Type ULARGE_INTEGER
  LowPart As Long
  HighPart As Long
End Type

Private Type OSVERSIONINFO
  dwOSVersionInfoSize As Long
  dwMajorVersion As Long
  dwMinorVersion As Long
  dwBuildNumber As Long
  dwPlatformId As Long
  szCSDVersion As String * 128
End Type

Private Const VER_PLATFORM_WIN32s = 0 ' Win 3.1 mit 32 Bit-Erweiterung
Private Const VER_PLATFORM_WIN32_WINDOWS = 1 ' Win NT/2000
Private Const VER_PLATFORM_WIN32_NT = 2 ' Win 9x

Sub GetInfos()
  Dim Retval As Long, OS As OSVERSIONINFO, InputRet As String, Buffer As String
  Buffer = Space(256)
  Retval = GetLogicalDriveStrings(Len(Buffer), Buffer)
  Buffer = Left$(Buffer, Retval)
  Buffer = Replace(Buffer, "\" & vbNullChar, ", ")
  InputRet = InputBox("Bitteg geben sie einen Laufwerksbuchstaben ein (" & _
  Buffer & ").", "Speicher Information ermitteln", "C:\")
  If InputRet = "" Or Len(InputRet) > 3 Then
    MsgBox "Ungültige eingabe, Bitte geben sie nur Laufwerksbuchstaben, Doppelpunkt und Backslash ein"
    Exit Sub
  End If
  OS.dwOSVersionInfoSize = Len(OS)
  Retval = GetVersionEx(OS)
  If Retval = 0 Then
    MsgBox "Betriebssystem Version konnte nicht ermittelt werden."
    Exit Sub
  End If
  With OS
    Select Case .dwPlatformId
    Case VER_PLATFORM_WIN32_WINDOWS
      If InStr(1, OS.szCSDVersion, "B") <> 0 Or .dwMinorVersion > 0 Then
        Call GetNewFreespace(InputRet)
      Else
        Call GetOldFreespace(InputRet)
      End If
    Case VER_PLATFORM_WIN32_NT
      If .dwMajorVersion >= 4 Then
        Call GetNewFreespace(InputRet)
      Else
        Call GetOldFreespace(InputRet)
      End If
    Case Else
      MsgBox "Windows 3.x Version kann nicht ermittelt werden."
    End Select
  End With
End Sub

Private Function GetOldFreespace(ByVal Root As String)
  Dim Retval As Long
  Dim SC As Long, BC As Long, FC As Long, TC As Long
  Dim TSpace As Long, FSpace As Long, USpace As Long
  Retval = GetDiskFreeSpace(Root, SC, BC, FC, TC)
  TSpace = TC * SC * BC / 1024 / 1024
  FSpace = FC * SC * BC / 1024 / 1024
  USpace = TSpace - FSpace
  MsgBox "Gesamt: " & Format$(TSpace, "##.00 MB") & vbCrLf & _
    "Belegt: " & Format$(USpace, "##.00 MB") & vbCrLf & _
    "Frei: " & Format$(FSpace, "##.00 MB") & vbCrLf _
    , , "Festplattenspeicher Laufwerk """ & Root & """"
End Function

Private Function GetNewFreespace(ByVal Root As String)
  Dim Retval As Long
  Dim CBytes As ULARGE_INTEGER, TBytes As ULARGE_INTEGER, FBytes As ULARGE_INTEGER
  Dim CB  As Currency, TB As Currency, FB As Currency, UB As Currency
  Retval = GetDiskFreeSpaceEx(Root, CBytes, TBytes, FBytes)
  CopyMemory CB, CBytes, 8
  CB = CB * 10000 / 1024 / 1024
  CopyMemory TB, TBytes, 8
  TB = TB * 10000 / 1024 / 1024
  CopyMemory FB, FBytes, 8
  FB = FB * 10000 / 1024 / 1024
  UB = TB - FB
  MsgBox "Gesamt: " & Format$(TB, "##.00 MB") & vbCrLf & _
    "Belegt: " & Format$(UB, "##.00 MB") & vbCrLf & _
    "Frei: " & Format$(FB, "##.00 MB") & vbCrLf _
    , , "Festplattenspeicher Laufwerk """ & Root & """"
End Function

Beiträge aus dem Excel-Forum zu den Themen API und System

Excel to Word Kapitel VBA Anfangskapital berechnen
Gestapelte Säulen-Diagramm: Ich kapier's nicht Googel Maps API in Excel VBA einfügen
Private Const CheckCell_1 = "System!AI9" Problem mit dem Rang-System
Berechnung vom Endkapital Systemp-Variable benötigt
Netzwerkpfad per FileSystemObject wechseln GetSystemMetrics
API? - xl-Parameter aus Long-Wert bestimmen Berechnung Kapitalanlage
System Variablen mit Excel auslesen Telefonnummer auslesen per TAPI
Schichtsystem im Kalender Läuft RSAPI.DLL mit WIN2000 und XP?
Auslesen Systemdaten, Zellschutz und Counter Systemauslastung mitloggen
JAVA API mit VBA verwenden Kurzzeitig steuerung des Systems übernehmen
Daten aus einer Tabelle auslesen-Koordinatensystem Systemunabhängige Email an mehrere Empfänger
fs - system (filesearch) Abfrage, ob Outlook oder Lotus Notes Mailsystem
Schichtsystem Systemvariable - Benutzername auslesen
PageSetup - absolute Systemauslastung Windows Systeminfo
Papierformat speichern FileSystemObject Frage
Kassensystem mit excel Excel -mangelnde Systemresourcen
Kleines Lager/Kassensystem verschiedene Papierquele beim Drucken
Entnahme mit Kapitalverzehr Berechnung Endkapital / Zinsen
Mehrfachberechnung linearesGleichungssystem-Solver Druck auf Papier und PDF mit und ohne Logo
Frage zur RSAPI.DLL Kombination Seitenumbruch Papierformat Anpassen
Koordinatensystem mit 4 Quadranten Kein Download wenn Betriebssystem Vista ist
Hilfe bei der Fehlersuche (API) Frage zu XKAPITALWERT
API-Zugriff Endkapital? bei unterschiedlichen Zahlungen
Handelssystem API für Tastaturpuffer auslesen
API für Tastaturpuffer auslesen Koordinatensystem definieren