Je ne comprends pas, tu y accèdes de la même façon.
Disque dur
Clé USB
ton téléphone
La méthode est la même
La seule différence, c'est que la lettre associé au lecteur peut changer. Mais tu peux retrouver la lettre de lecteur grâce au nom du lecteur par exemple.
Voici un code qui liste les lecteurs du PC
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
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)]