[R] Détecter insertion usb

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
quelqun
Niveau 4
Niveau 4
Messages : 66
Enregistré le : sam. 08 janv. 2011 23:56
Status : Hors ligne

Re: [..] Détecter insertion usb

#21

Message par quelqun »

Tlem a écrit :Surement par ce que $Old_Drives contient 2 éléments.
$Old_Drives[0] = 2 (Total des éléments)
$Old_Drives[1] = a:
$Old_Drives[2] = c:
non ("c:" n'est pas de type "removable") $Old_Drives contient avant le branchement de la clef 1 élement ("a:") et aprés le branchement de la clef 2 élements ("a:" et la lettre de la clef) et si on veut accéder a $Old_Drives[2] avant le branchement de la clef le programme est couper brutalement.
a ton avis que va faire ce code:

Code : Tout sélectionner

For $i = 1 To 1
    msgbox(0,"",$i)
Next
msgbox(0,"",$i)
 
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Détecter insertion usb

#22

Message par Tlem »

quelqun a écrit :non ("c:" n'est pas de type "removable")
Très juste. Autant pour moi.

Quand au code que vous donnez, il est sensé afficher deux fois le nombre 1. Mais j'ai constaté avec stupeur que la deuxième boite de message affiche 2. :shock:

Par curiosité, j'ai même essayé avec la version 3.2.4.9 de AutoIt et je constate la même chose !!!
Je me suis dit que c'était vraiment énorme si c'était un beug non découvert, donc direction la sainte bible (la documentation de AutoIt).
Et là, après lecture de la section Remarks, tout devient clair :
The For loop terminates when the value of variable exceeds the stop threshold
Donc après cet éclaircissement, je dit que finalement tout est normal. ;)

Ceci dit, je tiens à rappeler que je ne suis pas l'auteur de ce code, donc, c'est une question qui aurait du être posée à BlueCore. :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
quelqun
Niveau 4
Niveau 4
Messages : 66
Enregistré le : sam. 08 janv. 2011 23:56
Status : Hors ligne

Re: [..] Détecter insertion usb

#23

Message par quelqun »

ok merci Tlem c'est génial :)
autre chose: a quoi sert précisement cet ligne:

Code : Tout sélectionner

If $Drives[$i] <> $Old_Drives[$i] Then ExitLoop
?

merci
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Détecter insertion usb

#24

Message par Tlem »

C'est une comparaison d'éléments de tableaux.
Le tableau $Drives contient la liste des lecteurs en cours et le tableau $Old_Drives contient la liste des anciens lecteurs (ceux détectés lors du lancement du script, ou ceux actualisés vers la fin des tests => $Old_Drives = $Drives).

Donc par la boucle FOR, BlueCore fait une comparaison élément par élément. Si l'élément $i est différent entre les deux tableaux ($Drives[$i] <> $Old_Drives[$i]) alors il quitte la boucle FOR (ExitLoop)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
quelqun
Niveau 4
Niveau 4
Messages : 66
Enregistré le : sam. 08 janv. 2011 23:56
Status : Hors ligne

Re: [..] Détecter insertion usb

#25

Message par quelqun »

en sort de la boucle FOR avant ou aprés que la variable i dépasse le seuil d'arrêt (1) ?
si c'est avant alors je vois pas beaucoup l'intêret de mettre une boucle FOR :|

Code : Tout sélectionner

$Drives = DriveGetDrive("REMOVABLE")
$Old_Drives = DriveGetDrive("REMOVABLE")

While 1

    $Drives = DriveGetDrive("REMOVABLE")

    If $Drives[0] <> $Old_Drives[0] Then
        If $Drives[0] > $Old_Drives[0] Then ;Périphérique Ajouté

            ToolTip("Clé USB " & $Drives[$Old_Drives[0]+1] & " branchée.", 10, 10, "Information", 1)
        Endif
    EndIf
    sleep(50)
Wend
 
si c'est aprés alors la sortie de la boucle sera déclencher par:

Code : Tout sélectionner

            For $i = 1 To $Old_Drives[0]
                If $Drives[$i] <> $Old_Drives[$i] Then ExitLoop ;quand i=2 ==> en compare "H:" avec $Old_Drives[2]
            Next
je suis sûre que ce code va planter est même qu'il va être couper brutalement puisqu'on essaye d'accéder a une valeur qui n'éxiste pas $Old_Drives[2] .

alors la question est:
en sort de la boucle FOR avant ou aprés que la variable i dépasse le seuil d'arrêt (1) ?

merci
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Détecter insertion usb

#26

Message par Tlem »

quelqun a écrit :je suis sûre que ce code va planter est même qu'il va être couper brutalement puisqu'on essaye d'accéder a une valeur qui n'éxiste pas $Old_Drives[2]
Si vous connaissez la réponse, alors pourquoi insister lourdement.
Utilisez le code que je vous ai donné, comme ça il n'y aura pas de problème ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
quelqun
Niveau 4
Niveau 4
Messages : 66
Enregistré le : sam. 08 janv. 2011 23:56
Status : Hors ligne

Re: [..] Détecter insertion usb

#27

Message par quelqun »

Tlem a écrit :Utilisez le code que je vous ai donné, comme ça il n'y aura pas de problème ...
Je ne comprend pas trop votre code. C'est pour ça que je recherche a savoir comment fonctionne éxactement le code de BlueCore (si sa vous dérange pas :roll: ) qui me parait plus simple .
C'est tout :)


merci
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Détecter insertion usb

#28

Message par Tlem »

Heuuu, 'mon code' est des plus simple ...
D'abord, vous avez cette partie à mettre en début de script par exemple :
► Afficher le texte
Ensuite, vous rajoutez cette fonction à la fin de votre code :
► Afficher le texte
Et enfin, dans la fonction ci-dessus, modifiez les deux lignes contenant la commande ConsoleWrite afin d'exécuter la fonction ou la commande que vous désirez.

Par exemple, remplacez la ligne :
ConsoleWrite("Lecteur " & $DriveIn & " ajouté" & @CRLF)
Par
MsgBox(0, "Ajout", "Lecteur " & $DriveIn & " ajouté")

Vous pouvez aussi y mettre le nom d'une fonction qui réalisera une action plus évoluée qu'une simple boite de message. :roll:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
quelqun
Niveau 4
Niveau 4
Messages : 66
Enregistré le : sam. 08 janv. 2011 23:56
Status : Hors ligne

Re: [..] Détecter insertion usb

#29

Message par quelqun »

Je sais pas quoi dire :| :?
Mais merci quand même c'est la moindre des choses...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Détecter insertion usb

#30

Message par Tlem »

N'oubliez pas la balise [R] dans le titre de votre premier message si votre sujet est résolu.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
quelqun
Niveau 4
Niveau 4
Messages : 66
Enregistré le : sam. 08 janv. 2011 23:56
Status : Hors ligne

Re: [..] Détecter insertion usb

#31

Message par quelqun »

Ah ouai maintenant j'ai compris le rôle de la boucle For :)
en fait c'est fait pour ne pas se tromper avec les lettres des clefs ;)
parce que si on branche une clef la premiére et qu'elle prend la lettre H: et qu'elle se trouve dans $drives[2] et qu'onbranche ensuite une autre clef et qu'elle prend la lettre G: elle va se placer dans $drives[2] et basculer H: dans $drives[3] (j'ai constater que c'est classer par ordre alphabétique)
d'oû la boucle FOR pour contourner le probléme:

Code : Tout sélectionner

            For $i = 1 To $Old_Drives[0]
                If $Drives[$i] <> $Old_Drives[$i] Then ExitLoop ;IF "G:" <> "H:" Then sortir ($drives[$i] et la nouvelle USB ;) )
            Next
merci probléme résolu ;)
Répondre