Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4.6
; 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
DisplayName.s
FileSystem.s
EndStructure
Global NewList Drive.DriveInfos()
; Les valeurs retounées dans le type de lecteur
; #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.s, DriveIndex.l, FileInfo.SHFILEINFO, DriveName.s, DriveFileSystem.s, CharSize.b
; Vide la liste
ClearList(Drive())
; Taille des caractères en byte
CharSize = StringByteLength(" ")
; Récupère la liste des lecteurs
DriveString_Length = GetLogicalDriveStrings_(0, 0)
DriveString = Space(DriveString_Length)
DriveString_Length * CharSize
GetLogicalDriveStrings_(DriveString_Length, @DriveString)
DriveIndex = 0
Repeat
AddElement(Drive())
Drive()\Letter = PeekS(@DriveString + DriveIndex) ; Lettre
Drive()\Letter = StringField(Drive()\Letter , 1, ":") + ":"
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()\DisplayName = Trim(PeekS(@FileInfo\szDisplayName))
DriveName = Space(#MAX_PATH)
DriveFileSystem = Space(#MAX_PATH)
GetVolumeInformation_(Drive()\Letter + "\", @DriveName, #MAX_PATH, 0, 0, 0, @DriveFileSystem, #MAX_PATH) ; Récupère le nom du volume et le type du système de fichier
Drive()\Name = Trim(DriveName)
Drive()\FileSystem = Trim(DriveFileSystem)
Else
DeleteElement(Drive())
EndIf
DriveIndex + StringByteLength(DriveString) + CharSize
Until DriveIndex >= DriveString_Length - CharSize
EndProcedure
;- Debut du test
; Création de la fenêtre
If OpenWindow(0, 0, 0, 720, 200, "Lecteur", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
GetDrive()
ListIconGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), "Lettre", 40, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 1, "Type", 40)
AddGadgetColumn(0, 2, "Nom", 200)
AddGadgetColumn(0, 3, "Nom affiché dans l'explorateur", 300)
AddGadgetColumn(0, 4, "Système de fichier", 100)
ForEach Drive()
AddGadgetItem(0, -1, Drive()\Letter + Chr(10) + Str(Drive()\Type) + Chr(10) + Drive()\Name + Chr(10) + Drive()\DisplayName + Chr(10) + Drive()\FileSystem)
Next
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow