On ne peut plus faire defrag en auto sur W2k. Alors, voici Un petit bout de code pour réparer cet oubli.
Attention : J'ai deux disque, donc je le lance 2 fois. Ce code est a adapter à votre machine. Je compte l'amméliorer plus tard (pas le temp pour l'instant), mais il est suffisament simple pour que je vous le donne tel quel.
Utilise System.Windows.Forms.Form et Imports SysTimer = System.timers
Source / Exemple :
Public Class Form1
'Code MS non touché : #Region " Windows Form Designer generated code "
Dim WithEvents lDefrag As New clsDefrag
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
lDefrag.LanceDefrag()
End Sub
Private Sub lDefrag_Etat(ByVal DfgEtat As ModuleDefrag.clsDefrag.EnumDefragEtat) Handles lDefrag.Etat
If DfgEtat = ModuleDefrag.clsDefrag.EnumDefragEtat.Fini Then
lDefrag.FermeDefrag()
End
End If
End Sub
End Class
Module ModuleDefrag
'Cette class contient le code qui lance defrag sur les 2 premiers disques.
Public Class clsDefrag
Public Enum EnumDefragEtat
Fini
End Enum
Event Etat(ByVal DfgEtat As EnumDefragEtat)
Dim ProcID As Integer
Dim DfgEnd As Boolean 'Vrai quand dfg est fini.
Dim WithEvents lTimer As New SysTimer.Timer
Dim numDisk As Integer
Public Sub New()
'AddHandler lTimer.Elapsed, AddressOf OnTimedEvent
lTimer.Interval = 1000
End Sub
Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub
Public Sub LanceDefrag()
' Pour C:
OuvreDefrag()
End Sub
Private Sub OuvreDefrag()
numDisk += 1
If numDisk = 1 Then
ProcID = Shell("mmc c:\winnt\system32\dfrg.msc", AppWinStyle.NormalFocus, True, 2000)
SendKeys.SendWait("{TAB}")
ElseIf numDisk = 2 Then
AppActivate(ProcID)
SendKeys.SendWait("{DOWN}")
Else
RaiseEvent Etat(EnumDefragEtat.Fini)
End If
AppActivate(ProcID)
SendKeys.SendWait("%A")
SendKeys.SendWait("D")
lTimer.Start()
End Sub
Public Sub FermeDefrag()
AppActivate(ProcID)
SendKeys.SendWait("%{F4}") 'Ferme defrag.
End Sub
Private Sub Enregistre()
Try
AppActivate("Défragmentation terminée")
SendKeys.SendWait("{ENTER}")
SendKeys.SendWait("%E")
'Enregistre le résultat.
Dim Test As String
Test = "VolumeC.txt"
SendKeys.SendWait("" + Test + "")
SendKeys.SendWait("{ENTER}")
SendKeys.SendWait("{TAB}")
SendKeys.SendWait("{ENTER}") 'Pour supprimer fichier exitant
SendKeys.SendWait("{ENTER}") 'pour refermer dial
SendKeys.SendWait("{ENTER}") 'pour enreg. report
Catch
End Try
End Sub
Private Sub lTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles lTimer.Elapsed
Try
AppActivate("Défragmentation terminée")
Enregistre()
DfgEnd = True
lTimer.Stop()
' Pour D:
OuvreDefrag()
'FermeDefrag()
Catch
'manque ref form pour suivit.
End Try
End Sub
End Class
End Module
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.