Vitesse en écriture de votre disque dur
Publié : dim. 14/nov./2004 18:43
Salut,
un petit utilitaire qui permet de calculer la vitesse en écriture de vos disques dur
un petit utilitaire qui permet de calculer la vitesse en écriture de vos disques dur

Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.92
;
; Explication du programme :
; Tester la vitesse en écriture de vos disques dur
;- On cacul la vitesse en écriture du disque dur
Procedure.f HardDisk_WriteSpeed(Lecteur.s)
If CreateFile(0, Left(Lecteur, 1) + ":\Test disque dur.tmp") ; On crée un fichier de test sur le disque dur concerné
Mem = AllocateMemory(10 * 1024 * 1024) ; On alloue un espace de 10Mo en mémoire
Temps1 = GetTickCount_()
For n = 1 To 5 ; On écrit 50 Mo dans le fichier (5 * 10Mo)
WriteData(Mem, 10 * 1024 * 1024)
Next
Temps2 = GetTickCount_()
; Temps1 et Temps 2 serve a mesuré le temps mis pour écrire 50 Mo sur le disque dur
CloseFile(0)
DeleteFile(Left(Lecteur, 1) + ":\Test disque dur.tmp") ; On supprime le fichier de test
EndIf
ProcedureReturn 50 * 1000 / (Temps2 - Temps1) ; On retourne la viteesse en Mo/s
EndProcedure
;- On récupère le nom des disques durs
Structure DriveInfos
DriveLetter.s
DriveType.l
DriveTypeString.s
NameOfVolume.s
EndStructure
NewList DriveList.DriveInfos()
Procedure GetDrive(ListDriveType.l)
Protected Drive.s, DriveLetter.s, DriveType.l, Start.l, LengthDrive.l, DriveTypeString.s
#REMOVABLE_DRIVE = 1
#FIXED_DRIVE = 2
#REMOTE_DRIVE = 4
#CDROM_DRIVE = 8
#RAMDISK_DRIVE = 16
#UNKNOWN_DRIVE = 32
#ALL_DRIVE = 63
; On vide la liste
ClearList(DriveList())
; On récupère la lettre des différents lecteurs présent sur l'ordinateur
Drive = Space(255)
LengthDrive = GetLogicalDriveStrings_(255, @Drive)
For Start = 0 To LengthDrive - 4 Step 4
DriveLetter.s = PeekS(@Drive + Start, 3) ; on récupère une lettre
DriveType.l = GetDriveType_(@DriveLetter) ; on récupère le type du lecteur
Select DriveType ; On donne un nom au type de lecteur
Case #DRIVE_REMOVABLE : DriveType = #REMOVABLE_DRIVE : DriveTypeString.s = "Disquette"
Case #DRIVE_FIXED : DriveType = #FIXED_DRIVE : DriveTypeString.s = "Disque dur"
Case #DRIVE_REMOTE : DriveType = #REMOTE_DRIVE : DriveTypeString.s = "Lecteur réseau"
Case #DRIVE_CDROM : DriveType = #CDROM_DRIVE : DriveTypeString.s = "CD-ROM"
Case #DRIVE_RAMDISK : DriveType = #RAMDISK_DRIVE : DriveTypeString.s = "RamDisk"
Case #DRIVE_UNKNOWN : DriveType = #UNKNOWN_DRIVE : DriveTypeString.s = ""
EndSelect
If DriveType & ListDriveType ; on regarde si le type du lecteur correspond à ceux demandés
AddElement(DriveList())
DriveList()\DriveLetter = RemoveString(DriveLetter, "\")
DriveList()\DriveType = DriveType
DriveList()\DriveTypeString = DriveTypeString
If DriveLetter <> "A:\" And DriveLetter <> "B:\"
DriveList()\NameOfVolume = Space(255)
GetVolumeInformation_(@DriveLetter, @DriveList()\NameOfVolume, 255, 0, 0, 0, 0, 0)
DriveList()\NameOfVolume = Trim(DriveList()\NameOfVolume)
Else
DriveList()\NameOfVolume = ""
EndIf
EndIf
Next
EndProcedure
;- Procedure de la librairie ColorEffect
Procedure.l ColorLuminosity2(Couleur, Echelle.f) ; Eclaicir ou foncer une couleur
Protected Rouge, Vert, Bleu
Rouge = Red(Couleur) * Echelle
Vert = Green(Couleur) * Echelle
Bleu = Blue(Couleur) * Echelle
If Rouge > 255 : Rouge = 255 : EndIf
If Vert > 255 : Vert = 255 : EndIf
If Bleu > 255 : Bleu = 255 : EndIf
ProcedureReturn RGB(Rouge, Vert, Bleu)
EndProcedure
;- Debut de l'exemple
; Création de la fenêtre et de la GadgetList
#WinX = 200
#WinY = 125
#Bordure = 2
If OpenWindow(0, 0, 0, #WinX + 2 * #Bordure, #WinY, #PB_Window_BorderLess | #WS_BORDER | #WS_SYSMENU | #WS_MINIMIZEBOX | #PB_Window_ScreenCentered, "Disque dur") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
; Couleur de fond de la fenêtre
Couleur = GetSysColor_(#COLOR_3DFACE)
; Ligne de séparation
CreateImage(0, #WinX, 2)
StartDrawing(ImageOutput())
Line(0, 0, #WinX, 0, ColorLuminosity2(Couleur, 0.75))
Line(0, 1, #WinX, 0, ColorLuminosity2(Couleur, 1.25))
StopDrawing()
; Titre
CreateImage(1, #WinX + 2 * #Bordure, 25)
StartDrawing(ImageOutput())
For n = 0 To 24
Line(0, n, #WinX + 2 * #Bordure, 0, ColorLuminosity2(Couleur, 1.1 - 0.2 * n / 24))
Next
; On dessine le texte du titre
LoadFont(0, "Arial", 9, #PB_Font_Bold)
DrawingFont(FontID())
FrontColor(0, 0, 0)
DrawingMode(1)
Locate(3, 5)
DrawText("Disques durs - Vitesse d'éciture")
StopDrawing()
; On affiche les gadgets
ImageGadget(0, 0, 0, #WinX + 2 * #Bordure, 25, UseImage(1))
TextGadget(#PB_Any, #Bordure, 30, #WinX * 1 / 3, 15, "Lecteur :")
ComboBoxGadget(1, #Bordure + #WinX * 1 / 3, 27, #WinX * 2 / 3, 100)
ButtonGadget(2, #Bordure, 51, #WinX, 21, "Lancer")
GadgetToolTip(2, "Lancer le calcul de la vitesse d'écriture sur le disque dur")
DisableGadget(2, 1)
StringGadget(3, #Bordure, 75, #WinX, 20, "", #PB_String_ReadOnly)
ImageGadget(#PB_Any, #Bordure, #WinY - #Bordure * 2 - 21 - 2, #WinX, 2, UseImage(0)) ; Bordure de séparation
ButtonGadget(4, #Bordure, #WinY - #Bordure - 21, #WinX, 21, "Quitter")
; On récupère la liste des disques dur
GetDrive(#FIXED_DRIVE)
; On rempli la liste avec les disques disponibles
ResetList(DriveList())
While NextElement(DriveList())
AddGadgetItem(1, -1, DriveList()\DriveLetter + " (" + DriveList()\NameOfVolume + ")")
Wend
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventGadget
Select EventGadgetID() ; Gadgets
Case 2 ; Appui sur le bouton "Lancer"
If Lecteur.s ; Si un lecteur est sélectionné
DisableGadget(2, 1) ; On désactive le bouton "Lancer" et le bouton "Quitter"
DisableGadget(4, 1)
SetGadgetText(3, "Opération en cours ...") ; On affiche le texte montrant que le calcul est en cours
UpdateWindow_(WindowID()) ; On force l'actualisatiuon de l'affichage
SetGadgetText(3, StrF(HardDisk_WriteSpeed(Lecteur), 1) + " Mo/s") ; On affiche la vitesse d'écriture
DisableGadget(2, 0) ; On active le bouton "Lancer" et le bouton "Quitter"
DisableGadget(4, 0)
EndIf
Case 1
Lecteur = GetGadgetText(1)
If Lecteur
DisableGadget(2, 0) ; On rend le bouton "Lancer" utilisable
EndIf
Case 0 ; On clique sur le titre
SendMessage_(WindowID(), #WM_NCLBUTTONDOWN, #HTCAPTION, 0) ; On déplace la fenêtre tant que le bouton de la souris reste appuyé
Case 4 ; Appui sur le bouton quitter
Event = #PB_EventCloseWindow
EndSelect
EndIf
Until Event = #PB_EventCloseWindow
End