Sysinfo

Signaler
Messages postés
22
Date d'inscription
mercredi 4 octobre 2000
Statut
Membre
Dernière intervention
31 janvier 2011
-
Messages postés
61
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
14 février 2009
-
bonjour ,
je voudrais creer un pgm qui se declenche a l'insertion d'un cdrom ou dvd
j'ai trouve une source qui utilise l'ocx sysinfo evennement devicearrival
mon souci est que en deviceid il me donne -2147483632 et donc avec la fonction
getlettre(deviceid) impossible de trouver la lettre du lecteur ou j'ai insere un cdrom
voir exemple ci dessous
Private Sub SysInfo1_DeviceArrival(ByVal DeviceType As Long, ByVal DeviceID As Long, ByVal DeviceName As String, ByVal DeviceData As Long)
   Debug.Print "DeviceArrival"
   Debug.Print "devicetype " & DeviceType
   Debug.Print "DeviceID " & GetDrive(DeviceType, DeviceID)
   Debug.Print "DeviceName " & DeviceName
   Debug.Print "DeviceData " & DeviceData
End Sub

Private Function GetDrive(devType As Long, devID As Long) As String
   Select Case devType
   Case 0 To 1 ' returns null
      GetDrive = devID
      Exit Function
   Case 3 To 4 ' returns null
      GetDrive = devID
      Exit Function
   Case 2 ' logical drive.
      ' Create an array for the possible drive numbers returned by 
      ' deviceID
      Dim drives(25) ' A-Z
      Dim dvNum As Long ' Possible bit values.
      Dim i As Integer
      dvNum = 1
      drives(0) = 1
      ' Populate with bit values.
      For i = 1 To 25
         dvNum = dvNum * 2
         drives(i) = dvNum
      Next i
      For i = 0 To 25
         If drives(i) = devID Then
            GetDrive = "Drive: " & Chr(i + 65)
            Exit Function
         End If
      Next I
   Case Else   ' Other unexpected returns
      Debug.Print devType, devID
   End Select
 End Function

donc si quelqu'un a une solution a mon prob merci d'avance

Thierry

11 réponses

Messages postés
311
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2006
1
Bonjour titim77 ,
J'ai eu ce pb sous Me/98 uniquement pas sous XP...

juste au dessus de "Select Case devType" ajoute "If DeviceType <> 2 Then Exit Sub"...

...........

Private Function GetDrive(devType As Long, devID As Long) As String

If DeviceType <> 2 Then Exit Sub ' <= Pour ne traiter que les peripheriques de stockage !!
' <= (LogicalUnit)
Select Case devType
Case 0 To 1 ' returns null
...........

a+
ryl...
Messages postés
311
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2006
1
Euh... pardon !
C'est plutot : " If devType <> 2 Then Exit Sub "
voili...
ryl...
Messages postés
311
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2006
1
Re euh...
juste au dessus de : Debug.Print "DeviceArrival" ajoute "If DeviceType <> 2 Then Exit Sub"...

...........

Private Sub SysInfo1_DeviceArrival(ByVal DeviceType As Long, ByVal DeviceID As Long, ByVal DeviceName As String, ByVal DeviceData As Long)

If DeviceType <> 2 Then Exit Sub ' <= Pour ne traiter que les peripheriques de stockage !!
' <= (LogicalUnit)

Debug.Print "DeviceArrival"
Debug.Print "devicetype " & DeviceType
...........

ryl...
Messages postés
22
Date d'inscription
mercredi 4 octobre 2000
Statut
Membre
Dernière intervention
31 janvier 2011

merci pour ta reponse mais voici ce que j'ai

devicetype = 2
devicedata = 1
deviceid = -2147483632

donc je n'arrive pas a determiner la lettre du lecteur
Messages postés
311
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2006
1
Et juste comme ça ...

Private Sub SysInfo1_DeviceArrival(ByVal DeviceType As Long, ByVal DeviceID As Long, ByVal DeviceName As String, ByVal DeviceData As Long)

If DeviceID < 0 Then Exit Sub ' Si resultat negatif pas de traitement

Debug.Print "DeviceArrival"
Debug.Print "devicetype " & DeviceType
Debug.Print "DeviceID " & Chr(Log(DeviceID) / Log(2) + 65) ' Lettre lecteur (+ simple)!!
Debug.Print "DeviceName " & DeviceName
Debug.Print "DeviceData " & DeviceData
End Sub

Y a t-il un changement u pas ?
Quel OS utilise tu ?

a+
ryl...
Messages postés
22
Date d'inscription
mercredi 4 octobre 2000
Statut
Membre
Dernière intervention
31 janvier 2011

non toujours pas , j'ai win 2000 comme os
j'ai une erreur car le deviceid est negatif
Messages postés
311
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2006
1
Et juste comme ça ...

Private Sub SysInfo1_DeviceArrival(ByVal DeviceType As Long, ByVal DeviceID As Long, ByVal DeviceName As String, ByVal DeviceData As Long)

If DeviceID < 0 Then Exit Sub ' Si resultat negatif pas de traitement
If DeviceType <> 2 Then Exit Sub ' <= Pour ne traiter que les peripheriques de stockage !!
' <= (LogicalUnit)

Debug.Print "DeviceArrival"
Debug.Print "devicetype " & DeviceType
Debug.Print "DeviceID " & Chr(Log(DeviceID) / Log(2) + 65) ' Lettre lecteur (+ simple)!!
Debug.Print "DeviceName " & DeviceName
Debug.Print "DeviceData " & DeviceData
End Sub

a+
ryl...
Messages postés
22
Date d'inscription
mercredi 4 octobre 2000
Statut
Membre
Dernière intervention
31 janvier 2011

le probleme est que je veux traiter l'insertion d'un cdrom donc si je fais ca mon pgn ne fonctionnera jamais puisque le deviceid est negatif
Messages postés
311
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2006
1
Peut etre que dans ton cas: ( -2147483632 ) = ( E: ) non ?
As tu le meme résultat avec un lecteur CD/DVDROM different ?
a+
ryl...
Messages postés
22
Date d'inscription
mercredi 4 octobre 2000
Statut
Membre
Dernière intervention
31 janvier 2011

tout a fait , c'est mon lecteur e:

je vais essaye ailleurs pour voir si ca me fait la meme chose

merci

thierry
Messages postés
61
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
14 février 2009

C'est simple, ya une source sur vbfrance.com qui permet de déclencher une action qd un usb stockage arrive, tu peux faire la meme chose avec un cd en remplacent devicearival par un autre evenement, sous visual studio il sont tous décrit!!!!!!!!!

JB