Page 1 sur 1

[R] Je n'arrive pas à quitter la boucle

Posté : mar. 28 févr. 2012 08:43
par jpbon
Bonjour à tous,
C'est un débutant en programmation qui s'adresse à vous.
Je pense que ma question ne doit pas être compliqué, mais j'ai beau chercher par moi même, je ne trouve pas la solution. (Je tourne en rond)
Je souhaite réaliser la chose suivante :
Ouverture d'une boite de dialogue avec la demande de saisie d'un mot de passe, avec un bouton OK et un bouton Annuler.
Si le mot de passe est bon après un clic sur ok, un nouveau message s'affiche pour l'indiquer et on clic sur ok de ce nouveau message pour aller sur une page Web.
Si le mot de passe est incorrect, c'est un message d'erreur qui s'affiche et on clic sur un bouton recommencer pour revenir à la première fenêtre de saisie. (Idéalement après 5 essais on quitte le script).
Ce que j'ai écrit fonctionne en partie, mais la boucle semble se répéter à l'infinie.
Je ne sais pas non plus comment limiter les tentatives de saisies du mot de passe à 5 essais.
Si vous pouviez m'aider, ce serait super sympa.
Merci beaucoup.
Voici mon script :

Code : Tout sélectionner

While 1
    $valeur = InputBox("Saisir le mot de passe", "Attention au Majuscules & Minuscules ", "", " M11")
    If ($valeur) = "12345" Then
    MsgBox(32, "Bravo", "Mot de passe OK! ")
Else
    MsgBox(16, "Attention", "Mot de passe invalide.")
    EndIf
WEnd
    ShellExecuteWait("http://www.google.com")
    Sleep (20000)
Exit

 

Re: [..] Je n'arrive pas à quitter la boucle

Posté : mar. 28 févr. 2012 09:35
par mikell

Code : Tout sélectionner

Global $n = 0

While 1
$valeur = InputBox("Saisir le mot de passe", "Attention au Majuscules & Minuscules ", "", " M11")
If $valeur = "12345" Then
    MsgBox(32, "Bravo", "Mot de passe OK! ")
    ExitLoop
Else
    $n += 1
    MsgBox(16, "Attention", "Mot de passe invalide.")
EndIf
If $n = 5 Then 
    MsgBox(16, "Attention", "5 essais")
    Exit
EndIf
WEnd

Re: [..] Je n'arrive pas à quitter la boucle

Posté : mar. 28 févr. 2012 09:52
par jpbon
Merci pour cette réponse rapide.

Je vais tester ça dès que possible (ce soir).
Excellente journée.

L'entre aide c'est vraiment génial.
Mille merci

Re: [..] Je n'arrive pas à quitter la boucle

Posté : mar. 28 févr. 2012 10:05
par blacksoul305
Je m'invite juste à titre de conseil.
[color=#FF8000]mikell[/color] a écrit :

Code : Tout sélectionner

Global $n = 0

While 1
$valeur = InputBox("Saisir le mot de passe", "Attention au Majuscules & Minuscules ", "", " M11")
If $valeur = "12345" Then
    MsgBox(32, "Bravo", "Mot de passe OK! ")
    ExitLoop
Else
    [color=#0000BF]$n += 1[/color]
    MsgBox(16, "Attention", "Mot de passe invalide.")
EndIf
If $n = 5 Then 
    MsgBox(16, "Attention", "5 essais")
    Exit
EndIf
WEnd
La technique utilisée ici est l'incrémentation. Ça consiste à chaque fois que la boucle se répète, rajouter un nombre souhaité à la variable.
Ici, la variable $n joue ce rôle.

Elle est d'abord égale à 0 pour dire qu'aucune tentative a été faite. Une première condition vérifie que votre mot de passe est mauvais:
SI votre mot de passe est correct ALORS etc...
SINON ou rajoute +1 à la variable $n.
FIN (de la condition)

Une dernière condition est placée pour voir vérifier si la variable $n = 5.

En espérant avoir éclairé ce code (si jamais vous n'avez pas compris).

Re: [..] Je n'arrive pas à quitter la boucle

Posté : mar. 28 févr. 2012 13:40
par mikell
Merci pour ces explications que je n'ai pas eu le temps d'écrire ce matin (ric-rac pour le boulot...) :wink:

Re: [..] Je n'arrive pas à quitter la boucle

Posté : mar. 28 févr. 2012 16:08
par jpbon
Je viens de tester, et ça fonctionne comme je le souhaite, mis à part un petit détail, lorsque l'on clic sur
CANCEL, le message "Mot de passe invalide" revient également 5 fois et le script s'arrête ensuite après 5 fois CANCEL.
Idéalement je préfèrerais obtenir le message suivant, par exemple : "Abandon de la procédure" et quitter le script dès le premier clic sur CANCEL.
Merci pour votre aide. Bonne fin de journée.

J'ai essayé le code ci-dessous, en ajoutant un "If" mais je ne maitrise pas la syntaxe pour la commande Cancel.
Que faut il écrire pour indiquer un clic sur Cancel ?

Code : Tout sélectionner

Global $n = 0

While 1
$valeur = InputBox("Saisir le mot de passe", "Attention au Majuscules & Minuscules ", "", " M11")
If $valeur = "12345" Then
    MsgBox(32, "Bravo", "Mot de passe OK! ")
    ExitLoop
Else
    $n += 1
    MsgBox(16, "Attention", "Mot de passe invalide.")
EndIf
If $n = 5 Then
    MsgBox(16, "Attention", "5 essais")
    Exit
EndIf
If
    Cancel
    MsgBox(16, "ATTENTION", "Abandon de la procédure")
             Exit
EndIf
WEnd

ShellExecuteWait("http://www.google.com")
    Sleep (20000)
Exit

 

Re: [..] Je n'arrive pas à quitter la boucle

Posté : mar. 28 févr. 2012 16:30
par blacksoul305
Là il te faut aller dans l'aide d'Autoit. Celle-ci dit:
Aide Autoit pour la commande InputBox() a écrit : @error 0 = The string returned is valid.
1 = The Cancel button was pushed.
2 = The Timeout time was reached.
3 = The InputBox failed to open. This is usually caused by bad arguments.
4 = The InputBox cannot be displayed on any monitor.
5 = Invalid parameters width without height or left without top.
En clair, selon l'erreur, l'input te renvoie une erreur qui selon la valeur, veut dire une erreur différente. Je te mes le bout de code.

Code : Tout sélectionner

Global $n = 0

While 1
$valeur = InputBox("Saisir le mot de passe", "Attention au Majuscules & Minuscules ", "", " M11")
If $valeur = "12345" Then
    MsgBox(32, "Bravo", "Mot de passe OK! ")
    ExitLoop
ElseIf @error = 1 Then
    MsgBox(64,"Exit","Vous avez choisi de quitter le programme.")
    Exit
Else
    $n += 1
    MsgBox(16, "Attention", "Mot de passe invalide.")
EndIf
If $n = 5 Then
    MsgBox(16, "Attention", "5 essais")
    Exit
EndIf
WEnd
Et voilà le travail !

Re: [..] Je n'arrive pas à quitter la boucle

Posté : mar. 28 févr. 2012 16:33
par TopXm
Salut :)

Vu que Mikell travaille :)

[EDIT]en plus de poster "une grosse bêtise" j'ai un temps de retard :)

J'édite ma boulette :)

Re: [..] Je n'arrive pas à quitter la boucle

Posté : mar. 28 févr. 2012 16:33
par blacksoul305
Et ça s'est joué à pas longtemps. J'ai été le plus rapide !

Re: [..] Je n'arrive pas à quitter la boucle

Posté : mar. 28 févr. 2012 16:41
par TopXm
Yep :)

En plus c'était moins propre mon code :

Code : Tout sélectionner

    If $valeur = '' Then Exit    ;clic sur cancel on sort
;)

Re: [..] Je n'arrive pas à quitter la boucle

Posté : mar. 28 févr. 2012 17:00
par blacksoul305
J'vais pas te mentir, j'viens juste de comprendre le fonctionnement de cette commande haha !

Re: [..] Je n'arrive pas à quitter la boucle

Posté : mer. 29 févr. 2012 08:55
par jpbon
Bonjour à tous,
J'ai testé hier soir et ça fonctionne parfaitement comme je voulais.
En plus? grace à vos explications je comprends ce code et ça c'est plutôt bien pour la suite de mon utilisation d'AutoIt.
Un grand merci.
Je vous souhaite une excellente journée.