Page 1 sur 1

Nombre et taille des élements dans la corbeille

Publié : dim. 05/nov./2006 23:08
par Le Soldat Inconnu
Pour récupérer la nombre d'élément dans la corbeille, et la taille que cela représente.

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()

Publié : dim. 05/nov./2006 23:50
par Jacobus
Peut être utile pour intégrer à une application. Ce qui serait bien c'est de pouvoir agir directement sur les fichiers dans la corbeille.