vautour32
Messages postés38Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention 9 décembre 2008
-
26 nov. 2007 à 18:34
vautour32
Messages postés38Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention 9 décembre 2008
-
27 nov. 2007 à 19:06
Bonjour à tous,
Je voudrais créer un programme qui s'exécute quand un disque amovible est connecté à l'ordinateur.
Je connais l'événement DeviceArrival des contrôles sysinfo. Seulement, mon programme est sans interface, et ne s'exécute donc que très peu de temps, de sorte qu'il ne peut pas attendre que l'événement se produise.
SVP aidez-moi
Merci d'avance
Vautour32
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 26 nov. 2007 à 20:03
Bonsoir,
Dur dur... car nous allons parler de tout sauf de VB...
Je vais essayer de le faire par clichés successifs (et même le choix de l'ordre des clichés va être difficile) :
Cliché 1 : L'évènement DeviceArrival concerne le disque inséré.
Cliché 2 : on ne sait qu'un disque a été inséré que lorsque, la vitesse de rotation nécessaore ayant été atteinte (et ça prend du temps) il commence à être lisible.
Cliché 3 : tous les lecteurs installés (de disquettes, de CD ou de DVD) figurent du seul fait de leur installation, dans la liste des volumes présents, qu'ils contiennent ou non un support.
Cliché 4 : seuls les lecteurs externes, branchables par USB par exemple, sont absents jusqu'à leur branchement et pourraient donc se faire "dénoncer" lors q'un branchement.
Ayé ? Imprégné ?
On y va donc :
- Sysinfo ne te permet rien tant que le supposé disque n'est pas lu
- un timer espion des volumes présents ne te servirait que dans le cas d'un ajout de device (sur USB, par exemple)
- jouer avec la fermeture et l'ouverture (état) d'un lecteur serait vain (va donc savoir si une ouverture puis une fermeture a été faite avec ou sans insertion d'un support, sans, précisément, attendre de pouvoir lire le support ?)
Tu vois ? (ce n'est qu'une infime partie).
Conclusion : A moins que WMI (je n'ai pas cherché de ce côté) ne permette de déceler l'état matériel d'un device (pour ceux déjà installés), tu seras totalement incapable de t'en sortir... Et comme WMI risque par ailleurs de ne pas fonctionner toujours de la même manière (être exploitable).... rien ne tiendra en cas de volonté de distribuer ton appli....
Je te conseille donc de changer de philosophie, si tout celà a finalement un but (que l'on ne connait pas encore) atteignable par d'autres contrôles...
vautour32
Messages postés38Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention 9 décembre 2008 26 nov. 2007 à 20:20
Merci beaucoup pour toutes ces précisions. Je ne mets par "réponse acceptée" au cas où qq'un d'autre aurait une "illumination".
Que dirais-tu de cela?
Function Disqueajouté() As Drive
Static disques() As String
Dim i As Integer
Dim fso As FileSystemObject, drv As Drive
Set fso = CreateObject("scripting.filesystemobject")
If fso.Drives.Count > ubound(nbdisques) Then
ReDim Preserve disques(fso.Drives.Count)
For Each drv In fso.Drives
i = i + 1
If disques(i) <> drv.DriveLetter Then Set Disqueajouté = drv
disques(i) = drv.DriveLetter
Next
End If
End Function
vautour32
Messages postés38Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention 9 décembre 2008 27 nov. 2007 à 19:06
Effectivement. Désolé, j'étais un peu fatigué. Il manquait tout ce que j'ai mis en rouge.
Maintenant ça marche. Merci pour tout.
Function Disqueajouté() As Drive
Static disques() As String
Dim i As Integer
Dim fso As FileSystemObject, drv As Drive
Set fso = CreateObject("scripting.filesystemobject")
If DrivesCount > UBound(disques) Then
ReDim Preserve disques(DrivesCount)
For Each drv In fso.Drives
If drv.IsReady Then
i = i + 1
If disques(i) <> drv.DriveLetter Then Set Disqueajouté = drv
disques(i) = drv.DriveLetter
End If
Next
End If
End Function
Function DrivesCount() As Integer
Dim i As Integer
Dim fso As FileSystemObject, drv As Drive
Set fso = CreateObject("scripting.filesystemobject")
For Each drv In fso.Drives
If drv.IsReady Then i = i + 1
Next
DrivesCount = i
End Function