vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ? 
Autor: Kuno60
Datum: 12.04.15 18:11

Hallo,

Festplatten werden auch Fragmentiert, wenn sie fast Leer sind. Eine Defragmentierung steigert die Geschwindigkeit und erhöht die Lebensdauer. Dass Fehler durch starke Fragmentierung ausgelöst werden, hab ich bisher noch nicht festgestellt. Fehler können aber auftreten, wenn die Festplatte fast voll ist oder defekte Blöcke hat.

Die automatische Defragmentierung funktioniert bei mir, wird aber nur ausgeführt, wenn die Platte stark fragmentiert ist.

Beachte: Die Infos werden in der Registry auch aktualisiert, wenn nur eine Analyse durchgeführt wird.

Die Infos aus der Registry kann man mit folgendem Programm auslesen:
Dies ist kein VB6 Programm, da ich schon seit 10 Jahren nicht mehr mit VB6 arbeite.
Ist aber mit ein paar Änderungen auch in VB6 möglich. Bestimmt kann dir jemand dabei helfen.
Bei einem 64-bit System musst du die Werte auch aus der 64-bit Registry lesen.

Hier werden alle Festplatten ermittelt und mit Buchstabe und Bezeichnung in eine Listbox eingetragen.
Durch Anklicken eines Eintrags, wird die GUID ermittelt, alle Informationen gelesen und in einer Textbox angezeigt.
Imports System.IO
Imports System.Text
Imports Microsoft.Win32
Imports System.Runtime.InteropServices
 
Class HauptForm
 
  <DllImport("Kernel32.dll", SetLastError:=True)>
  Private Shared Function GetVolumeNameForVolumeMountPoint(lpszVolumeMountPoint _
    As String, <Out> lpszVolumeName As StringBuilder, cchBufferLength As _
    UInteger) As Boolean
  End Function
 
  ''' <summary>
  ''' Alle Festplatten.
  ''' </summary>
  Dim HardDrives As DriveInfo()
 
  Private Sub HauptForm_Load(sender As Object, e As EventArgs) Handles _
    MyBase.Load
    'Anzeige der vorhandenen Festplatten in einer Listbox (Buchstabe u. 
    ' Bezeichnung).
    HardDrives = DriveInfo.GetDrives.Where(Function(x) x.DriveType = _
      DriveType.Fixed).ToArray
    For Each di In HardDrives
      Me.DriveListBox.Items.Add(String.Format("{0} {1}", di.Name, _
        di.VolumeLabel))
    Next
  End Sub
 
  Private Sub DriveListBox_SelectedIndexChanged(sender As Object, e As _
    EventArgs) Handles DriveListBox.SelectedIndexChanged
    LeseRegistry(HardDrives(Me.DriveListBox.SelectedIndex))
  End Sub
 
  ''' <summary>
  ''' Liefert die Guid des angegebenen Laufwerks als:
  ''' Volume{2ed40sa2-3b6a-12e3-bac5-be6ca7a38a13}
  ''' </summary>
  ''' <param name="lw">Der Laufwerksname (C:\).</param>
  ''' <returns>Volume+Guid</returns>
  Private Shared Function GetDriveGuid(lw As String) As String
    Const maxLen = 100
    Dim sb As New StringBuilder(maxLen)
    ' Die Volume GUID abrufen 
    ' "\\?\Volume{2ed40sa2-3b6a-12e3-bac5-be6ca7a38a13}\"
    If Not GetVolumeNameForVolumeMountPoint(lw, sb, CUInt(maxLen)) Then
      Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error)
    End If
    Return sb.ToString.Substring(4, 44)
  End Function
 
  ''' <summary>
  ''' Liest alle Defrag-Informationen aus der Registry.
  ''' </summary>
  ''' <param name="drive">Das Laufwerk</param>
  Private Sub LeseRegistry(drive As DriveInfo)
    Dim g = GetDriveGuid(drive.Name)
    Dim bk = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, _
      RegistryView.Registry64)
    Dim RegPfad = Path.Combine("Software\Microsoft\Dfrg\Statistics", g)
    Dim sk = bk.OpenSubKey(RegPfad)
    '------------------------------------
    Dim sb As New StringBuilder()
    For Each valueName As String In sk.GetValueNames()
      Dim value = sk.GetValue(valueName)
      If TypeOf value Is Byte() Then
        Dim ba = CType(value, Byte())
        sb.AppendLine(String.Format("{0,-30}: {1}", valueName, GetDate(ba)))
      Else
        sb.AppendLine(String.Format("{0,-30}: {1}", valueName, value))
      End If
    Next
    sk.Close()
    bk.Close()
    Me.InfoTextBox.Text = sb.ToString
  End Sub
 
  ''' <summary>
  ''' Liefert das Datum aus dem Byte-Array von LastRunTime.
  ''' </summary>
  ''' <param name="bin">Byte-Array</param>
  ''' <returns>Datum und Zeit</returns>
  Private Shared Function GetDate(bin As Byte()) As Date
    If bin Is Nothing OrElse bin.Length <> 16 Then Throw New ArgumentException
    Return New Date(bin(0) + bin(1) * &H100, bin(2), bin(6), bin(8), bin(10), _
      bin(12))
  End Function
 
End Class
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Zustand der Festplatten-Fragmentierung in VB6 ermitteln ?2.484Wolfgang Schwarz03.04.15 15:24
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.858Manfred X05.04.15 11:04
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.500Wolfgang Schwarz05.04.15 11:39
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.640Manfred X05.04.15 12:40
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.383Wolfgang Schwarz05.04.15 15:06
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.347Manfred X05.04.15 16:26
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.767Kuno6012.04.15 18:11
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.313Wolfgang Schwarz12.04.15 18:31
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.333Manfred X13.04.15 11:49
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.325Wolfgang Schwarz13.04.15 12:03
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.372Manfred X13.04.15 12:29
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.343Wolfgang Schwarz13.04.15 12:50
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.270Manfred X13.04.15 13:03
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.375Wolfgang Schwarz13.04.15 13:23
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.280Manfred X13.04.15 13:34
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.388Wolfgang Schwarz13.04.15 14:05
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.310Manfred X13.04.15 14:33
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.441Wolfgang Schwarz13.04.15 14:48
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.300Manfred X13.04.15 15:29
Re: Zustand der Festplatten-Fragmentierung in VB6 ermitteln ...1.356Wolfgang Schwarz13.04.15 16:03

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel