Problème de tiroir ...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Simon
Messages : 25
Inscription : jeu. 24/févr./2005 20:30

Problème de tiroir ...

Message par Simon »

J'ai un petit problème de détection des péripheriques notement du lecteur CD (afin de sortir le tiroir du lecteur ...).
Es ce qu'il y a quequ'un pour m'aider svp ? :)

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

Message par Le Soldat Inconnu »

Regarde sur 2DEV (voir ma signature)
tu y trouvera un exemple permettant de lister tous les lecteurs ou certain lecteur suivant un filtre

EDIT : zut, je le trouve pas, va falloir que je l'ajoute :oops: ou alors je suis bigleu

bon, vl'a le code

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.90
;
; Explication du programme :
; Récupérer la lettre et le type (disquette, disque dur, etc...) de tous les lecteurs présents sur l'ordinateur.

Structure DriveInfos
  DriveLetter.s
  DriveType.l
  DriveTypeString.s
  NameOfVolume.s
EndStructure
NewList DriveList.DriveInfos()

Procedure GetDrive(ListDriveType.l)
  Protected Drive.s, DriveLetter.s, DriveType.l, Start.l, LengthDrive.l, DriveTypeString.s
  #REMOVABLE_DRIVE = 1
  #FIXED_DRIVE = 2
  #REMOTE_DRIVE = 4
  #CDROM_DRIVE = 8
  #RAMDISK_DRIVE = 16
  #UNKNOWN_DRIVE = 32
  #ALL_DRIVE = 63
  
  ; On vide la liste
  ClearList(DriveList())
  
  ; On récupère la lettre des différents lecteurs présent sur l'ordinateur
  Drive = Space(255)
  LengthDrive = GetLogicalDriveStrings_(255, @Drive)
  
  For Start = 0 To LengthDrive - 4 Step 4
  
    DriveLetter.s = PeekS(@Drive + Start, 3) ; on récupère une lettre
    
    DriveType.l = GetDriveType_(@DriveLetter) ; on récupère le type du lecteur
    
    Select DriveType ; On donne un nom au type de lecteur
      Case #DRIVE_REMOVABLE : DriveType = #REMOVABLE_DRIVE : DriveTypeString.s = "Disquette"
      Case #DRIVE_FIXED : DriveType = #FIXED_DRIVE : DriveTypeString.s = "Disque dur"
      Case #DRIVE_REMOTE : DriveType = #REMOTE_DRIVE : DriveTypeString.s = "Lecteur réseau"
      Case #DRIVE_CDROM : DriveType = #CDROM_DRIVE : DriveTypeString.s = "CD-ROM"
      Case #DRIVE_RAMDISK : DriveType = #RAMDISK_DRIVE : DriveTypeString.s = "RamDisk"
      Case #DRIVE_UNKNOWN : DriveType = #UNKNOWN_DRIVE : DriveTypeString.s = ""
    EndSelect
    
    If DriveType & ListDriveType ; on regarde si le type du lecteur correspond à ceux demandés
      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
      
    EndIf
  
  Next
EndProcedure




;- Debut du test

GetDrive(#REMOVABLE_DRIVE | #CDROM_DRIVE | #FIXED_DRIVE)

ResetList(DriveList())
While NextElement(DriveList())
  Debug DriveList()\DriveLetter + "   " + DriveList()\DriveTypeString + "   " + DriveList()\NameOfVolume
Wend
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)]
Simon
Messages : 25
Inscription : jeu. 24/févr./2005 20:30

Message par Simon »

Merci "Le Soldat Inconnu" :wink:

T'as réponce est un honneur pour moi :D :D
car j'ai regarder les trucs que tu fait sur le net ... 8O chapeau !

Merci pour ton code mais il y a juste un mini problème: j'ai la version complète le PB 3.93 et je n'arrive pas à compiler ton code sans le débuggeur . Es-ce normal ????????

Voilla meric a toi . ++
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

chez moi, ça marche très bien :

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu 
; Version de PB : 3.90 
; 
; Explication du programme : 
; Récupérer la lettre et le type (disquette, disque dur, etc...) de tous les lecteurs présents sur l'ordinateur. 

Structure DriveInfos 
  DriveLetter.s 
  DriveType.l 
  DriveTypeString.s 
  NameOfVolume.s 
EndStructure 
NewList DriveList.DriveInfos() 

Procedure GetDrive(ListDriveType.l) 
  Protected Drive.s, DriveLetter.s, DriveType.l, Start.l, LengthDrive.l, DriveTypeString.s 
  #REMOVABLE_DRIVE = 1 
  #FIXED_DRIVE = 2 
  #REMOTE_DRIVE = 4 
  #CDROM_DRIVE = 8 
  #RAMDISK_DRIVE = 16 
  #UNKNOWN_DRIVE = 32 
  #ALL_DRIVE = 63 
  
  ; On vide la liste 
  ClearList(DriveList()) 
  
  ; On récupère la lettre des différents lecteurs présent sur l'ordinateur 
  Drive = Space(255) 
  LengthDrive = GetLogicalDriveStrings_(255, @Drive) 
  
  For Start = 0 To LengthDrive - 4 Step 4 
    
    DriveLetter.s = PeekS(@Drive + Start, 3) ; on récupère une lettre 
    
    DriveType.l = GetDriveType_(@DriveLetter) ; on récupère le type du lecteur 
    
    Select DriveType ; On donne un nom au type de lecteur 
      Case #DRIVE_REMOVABLE : DriveType = #REMOVABLE_DRIVE : DriveTypeString.s = "Disquette" 
      Case #DRIVE_FIXED : DriveType = #FIXED_DRIVE : DriveTypeString.s = "Disque dur" 
      Case #DRIVE_REMOTE : DriveType = #REMOTE_DRIVE : DriveTypeString.s = "Lecteur réseau" 
      Case #DRIVE_CDROM : DriveType = #CDROM_DRIVE : DriveTypeString.s = "CD-ROM" 
      Case #DRIVE_RAMDISK : DriveType = #RAMDISK_DRIVE : DriveTypeString.s = "RamDisk" 
      Case #DRIVE_UNKNOWN : DriveType = #UNKNOWN_DRIVE : DriveTypeString.s = "" 
    EndSelect 
    
    If DriveType & ListDriveType ; on regarde si le type du lecteur correspond à ceux demandés 
      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 
      
    EndIf 
    
  Next 
EndProcedure 




;- Debut du test 

GetDrive(#REMOVABLE_DRIVE | #CDROM_DRIVE | #FIXED_DRIVE) 

Txt.s
ResetList(DriveList()) 
While NextElement(DriveList()) 
  Txt + DriveList()\DriveLetter + "   " + DriveList()\DriveTypeString + "   " + DriveList()\NameOfVolume + Chr(10)
Wend
MessageRequester("Liste des lecteurs", Txt)
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)]
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Si tu as constamment le debuggeur, c'est que tu as la version démo ! POur ne plus l'avoir, achète le !
Simon
Messages : 25
Inscription : jeu. 24/févr./2005 20:30

Message par Simon »

Avec le 2em code cela marche et le problème du premier est qu'il ne marche que quand j'active le debuggeur.... ( car j'ai la version complète != :P

Donc si il y a une solution a ce ptit problème ... faite moi le savoir :D
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ben le premier code n'affiche rien si il n'y a pas le debugger :lol: c'est pas ça ton soi disant problème
car le seul changement, c'est que dans le 2ème, j'utilise un messagerequester() à la place du debugger
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)]
Simon
Messages : 25
Inscription : jeu. 24/févr./2005 20:30

Message par Simon »

Oui je sai merci :D :D :D :D
++
Répondre