Merci

Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Obtenir l'espace libre ou la taille d'un lecteur, ou afficher l'espace libre ou la taille d'un lecteur (unité et précision personnalisable)
Procedure.q GetDiskFreeSpace(Lecteur.s, Type.l = 0)
; lecteur = nom du lecteur
; type = choix de la réponse, 0 = espace libre sur le lecteur, 1 = taille du lecteur
Protected EspaceLibre.q, Taille.q, resultat.q
GetDiskFreeSpaceEx_(Lecteur, @EspaceLibre, @Taille, 0)
Select Type
Case 0 : resultat = EspaceLibre
Case 1 : resultat = Taille
EndSelect
ProcedureReturn resultat
EndProcedure
Procedure.s DisplayDiskFreeSpace(Taille.q, Unite.l = -1, NbDecimals.l = -1)
; Taille = taille du lecteur
; Unite = unité de la taille, 0 = Octet, 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
If Taille >= 10000 : Unite = 1 : NbDecimals = 1 : EndIf
If Taille >= 1000000 : Unite = 2 : NbDecimals = 2 : EndIf
If Taille >= 10000000 : Unite = 2 : NbDecimals = 1 : EndIf
If Taille >= 1000000000 : Unite = 3 : NbDecimals = 2 : EndIf
If Taille >= 10000000000: Unite = 3 : NbDecimals = 1 : EndIf
EndIf
Select Unite
Case 0 : Val = 1 : Txt = " octets"
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
;- Test
Debug GetDiskFreeSpace("c:\program files\", 1)
Debug DisplayDiskFreeSpace(GetDiskFreeSpace("c:\program files\", 1))
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Récupérer la lettre et le type (disquette, disque dur, etc...) de tous les lecteurs présents sur l'ordinateur.
Procedure GetDrive(Search_Type.l = -1)
Structure DriveInfos
Letter.s
Type.l
Name.s
EndStructure
Global NewList Drive.DriveInfos()
; Value for Search_Type :
;
; DRIVE_UNKNOWN
; 0
; The Drive Type cannot be determined.
;
; DRIVE_NO_ROOT_DIR
; 1
; The root Path is invalid; for example, there is no volume is mounted at the path.
;
; DRIVE_REMOVABLE
; 2
; The Drive has removable media; for example, a floppy drive, thumb drive, or flash card reader.
;
; DRIVE_FIXED
; 3
; The Drive has fixed media; for example, a hard drive or flash drive.
;
; DRIVE_REMOTE
; 4
; The Drive is a remote (network) Drive.
;
; DRIVE_CDROM
; 5
; The Drive is a CD-ROM Drive.
;
; DRIVE_RAMDISK
; 6
; The drive is a RAM disk.
Protected DriveString_Length.l, DriveString.l, DriveIndex.l, FileInfo.SHFILEINFO
; On vide la liste
ClearList(Drive())
CoInitialize_(0)
; On récupère la liste des lecteurs
DriveString_Length = GetLogicalDriveStrings_(0, 0)
*DriveString = AllocateMemory(DriveString_Length)
GetLogicalDriveStrings_(DriveString_Length, *DriveString)
For DriveIndex = 0 To DriveString_Length - 4 Step 4
AddElement(Drive())
Drive()\Letter = PeekS(*DriveString + DriveIndex) ; lettre
Drive()\Type = GetDriveType_(@Drive()\Letter) ; type de lecteur
If Drive()\Type = Search_Type Or Search_Type = -1
SHGetFileInfo_(Drive()\Letter, 0, @FileInfo, SizeOf(SHFILEINFO), #SHGFI_DISPLAYNAME)
Drive()\Name = PeekS(@FileInfo\szDisplayName)
Else
DeleteElement(Drive())
EndIf
Next
FreeMemory(*DriveString)
CoUninitialize_()
EndProcedure
;- Debut du test
GetDrive()
ForEach Drive()
Debug "'" + Drive()\Letter + "' '" + Str(Drive()\Type) + "' '" + Drive()\Name + "'"
Next