le code peut parètre long mais il contient plusieurs choses :
- La recherche de tous les lecteurs sur le disque dur car il faut analyser la corbeille pour chaque disque dur
- L'affichage de la taille sous forme de texte avec mise à l'échelle auto
Code : Tout sélectionner
; Auteur : le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Obtenir des informations sur le contenu de la corbeille
Structure DriveInfos
DriveLetter.s
DriveType.l
DriveTypeString.s
NameOfVolume.s
EndStructure
Global NewList DriveList.DriveInfos()
Procedure GetDrive()
Protected Drive.s, DriveLetter.s, DriveType.l, Start.l, LengthDrive.l, DriveTypeString.s
ClearList(DriveList())
Drive = Space(255)
LengthDrive = GetLogicalDriveStrings_(255, @Drive)
For Start = 0 To LengthDrive - 4 Step 4
DriveLetter.s = PeekS(@Drive + Start, 3)
DriveType.l = GetDriveType_(@DriveLetter)
Select DriveType
Case #DRIVE_REMOVABLE : DriveTypeString.s = "Disquette"
Case #DRIVE_FIXED : DriveTypeString.s = "Disque dur"
Case #DRIVE_REMOTE : DriveTypeString.s = "Lecteur réseau"
Case #DRIVE_CDROM : DriveTypeString.s = "CD-ROM"
Case #DRIVE_RAMDISK : DriveTypeString.s = "RamDisk"
Case #DRIVE_UNKNOWN : DriveTypeString.s = ""
EndSelect
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
Next
EndProcedure
Procedure.s DisplaySize(Taille.q, Unite.l, NbDecimals.l)
; Affiche une taille sous forme de texte
; Taille = taille du lecteur
; Unite = unité de la taille, 0 = Octect, 1 = Ko, 2 = Mo, 3 = Go. Si = -1, Le choix de l'unité et du nombre de décimal sera automatique
; NbDecimals = nombre de chiffre après la virgule.
Protected Val.q, Txt.s
If Unite = -1
NbDecimals = 0 : Unite = 0
If Taille >= 1000 : Unite = 1 : NbDecimals = 2 : EndIf ; 0.00 Ko
If Taille >= 10000 : Unite = 1 : NbDecimals = 1 : EndIf ; 000.0 Ko
If Taille >= 1000000 : Unite = 2 : NbDecimals = 2 : EndIf ; 0.00 Mo
If Taille >= 10000000 : Unite = 2 : NbDecimals = 1 : EndIf ; 000.0 Mo
If Taille >= 1000000000 : Unite = 3 : NbDecimals = 2 : EndIf ; 0.00 Go
If Taille >= 10000000000 : Unite = 3 : NbDecimals = 1 : EndIf ; 000.0 Go
EndIf
Select Unite
Case 0 : Val = 1 : Txt = " octects"
Case 1 : Val = 1024 : Txt = " Ko"
Case 2 : Val = 1024 * 1024 : Txt = " Mo"
Case 3 : Val = 1024 * 1024 * 1024 : Txt = " Go"
EndSelect
ProcedureReturn StrF(Taille / Val, NbDecimals) + Txt
EndProcedure
Procedure Corbeille()
Structure SHQUERYRBINFO
cbSize.l
Size.q
numItems.q
EndStructure
Protected Corbeille.SHQUERYRBINFO, Taille.q, Element.q
GetDrive() ; On récupère tous les lecteurs de l'ordinateur
If OpenLibrary(0, "shell32.dll")
Corbeille\cbSize = SizeOf(SHQUERYRBINFO)
ForEach DriveList()
If DriveList()\DriveType = #DRIVE_FIXED ; Si il s'git d'un disuqe dur, on regarde le contenu de la corbeille
If CallFunction(0, "SHQueryRecycleBinA", DriveList()\DriveLetter + ":\", @Corbeille) = #S_OK ; On récupère les informations sur la corbeille
Taille + Corbeille\Size
Element + Corbeille\numItems
EndIf
EndIf
Next
; On affiche le résultat
MessageRequester("Corbeille", Str(Element) + " élément(s) dans la Corbeille [ " + DisplaySize(Taille, -1, 0) + " ]")
CloseLibrary(0)
EndIf
EndProcedure
Corbeille()