Comment Afficher les infos des disques durs ?

Sujets variés concernant le développement en PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Comment Afficher les infos des disques durs ?

Message par Anonyme2 »

Je n'ai pas beaucoup cherché, j'aimerais afficher ce qui suit, vous avez une idée des API du shell à utiliser ?

Merci

Image
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Et voilà :)
Tu en as du bazar en disque sur ton PC toi ... pfiouuuuu

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))
Dernière modification par Le Soldat Inconnu le lun. 17/nov./2008 20:07, modifié 1 fois.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

et ça c'est pour lister les disques sur ton PC

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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Le Soldat Inconnu a écrit :Et voilà :)
Tu en as du bazar en disque sur ton PC toi ... pfiouuuuu
Ha bon ? :D

J'ai ajouté ceux de mon ancien PC sur le nouveau et voilà
Merci pour les codes LSI, je vais tester.

A+
Répondre