[R] Sortir d'une fonction boucle infinie

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

[R] Sortir d'une fonction boucle infinie

#1

Message par JulienBoul »

Hello,

Je cherche a sortir d'une fonction en boucle à l'intérieur d'un programme. Je m'explique.
J'ai un programme perso qui tourne en permanence pendant que je travaille.
J'ai plusieurs raccourcis (cf code) qui me permettent d'ouvrir à chaque fois une fonction différente.

Code : Tout sélectionner

#NoTrayIcon
#AutoIt3Wrapper_Icon=..\..\QUALITE\icone\60b.ico
#AutoIt3Wrapper_UseX64=n

#cs ----------------------------------------------------------------------------

 AutoIt Version : 3.3.14.2
 Auteur:         JulienBoul - autoitscript.fr

 Fonction du Script : couteau Suisse

#ce ----------------------------------------------------------------------------

#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <TrayConstants.au3>


; modification du ToolTip sur icone autoit du Systray (permet l'affichage de l'aide du logiciel)
TraySetState($TRAY_ICONSTATE_SHOW) ; Show the tray menu.
TraySetToolTip("Pour accéder à l'aide, appuyez simultanément sur Shift-Alt-0")

; liste des raccourcis utilisés.
HotKeySet("+!0", "Aide_Shortcut")   ; Shift-Alt-0
HotKeySet("+!1", "Pourcentage")     ; Shift-Alt-1
;HotKeySet("+!2", "mailmag")         ; Shift-Alt-2
;HotKeySet("+!3", "Nom_mag")         ; Shift-Alt-3
HotKeySet("+!4", "Renommer_pdf")    ; Shift-Alt-4
;HotKeySet("+!5", "Vide")           ; Shift-Alt-5
;HotKeySet("+!6", "Vide")           ; Shift-Alt-6
;HotKeySet("+!7", "Vide")           ; Shift-Alt-7
;HotKeySet("+!8", "Vide")           ; Shift-Alt-8
HotKeySet("+!9", "Quitter")         ; Shift-Alt-9

While 1
    Sleep(100)
WEnd

; Shift-Alt-0
Func Aide_Shortcut()
    MsgBox($MB_SYSTEMMODAL, "Raccourcis", "Aide ; Shift-Alt-0" & @CRLF & "Pourcentage ; Shift-Alt-1" & @CRLF & "Renommer_pdf ; Shift-Alt-4" & @CRLF & "Quitter ; Shift-Alt-9")
EndFunc   ;==>Aide_Shortcut

; Shift-Alt-1
Func Pourcentage()
            $nombre = InputBox("Calcul de 60% du nombre", "entrer le prix d'achat", "")
            $pourcentage = 0.60; fixe le pourcentage souhaité
        ClipPut ($nombre*$pourcentage)
EndFunc   ;==>Pourcentage

; Shift-Alt-4
Func Renommer_pdf()
    While 1
        $Renommer_pdf = InputBox("SAISIE DU NOM DE FICHIER", "Vous pouvez entrer ici le nom de votre dossier.", "", "", "", "", 100, 100, 0, GUICreate("", 0, 0, 0, 0, Default, @SW_SHOWDEFAULT))
        ClipPut ($Renommer_pdf)
    Sleep (50)
        WinActivate ("Adobe Reader") ; ouvre le logiciel dont une partie du titre comporte "Adobe Reader"
        ProcessClose ("AcroRd32.exe") ; ferme le processus de Adobe Reader
    Sleep (100)
        Send ("!{TAB}")
    Sleep (50)
        Send ("{F2}")
        Send ("^v")
        Send ("{ENTER}")
        Send ("{HOME}")
        Send ("{ENTER}")
    Sleep (1000)
        ControlClick("SAISIE DU NOM DE FICHIER","","[CLASS:Edit; INSTANCE:1]","left")
            If @error = 1 Then
            Exit
        EndIf
    WEnd
EndFunc

; Shift-Alt-9
Func Quitter()
Exit
EndFunc   ;==>Quitter
 
En gros j'ai une calculette, j'ai un système de correspondance array, tu entre la valeur de la colonne 1, il te sort les valeurs des colonnes 2 et 3, j'ai un système qui facilite le renommage en masse de documents scannés, etc.
J'ai conçu mon logiciel un peu comme un couteau Suisse qui me fait gagner beaucoup en productivité.

Je suis embêté, j'ai une boucle infinie pour cette partie de code, et je souhaiterai que lorsque l'on clic sur annuler ou que l'on appuie sur "échap" ma boucle s’arrête.
J'avais réussi avec le raccourcis Shift-Alt-9 mais c'est mon programme entier qui se coupe, pas ma fonction.
Voici la partie de code qui me contrarie:

Code : Tout sélectionner

; Shift-Alt-4
Func Renommer_pdf()
    While 1
        $Renommer_pdf = InputBox("SAISIE DU NOM DE FICHIER", "Vous pouvez entrer ici le nom de votre dossier.", "", "", "", "", 100, 100, 0, GUICreate("", 0, 0, 0, 0, Default, @SW_SHOWDEFAULT))
        ClipPut ($Renommer_pdf)
    Sleep (50)
        WinActivate ("Adobe Reader") ; ouvre le logiciel dont une partie du titre comporte "Adobe Reader"
        ProcessClose ("AcroRd32.exe") ; ferme le processus de Adobe Reader
    Sleep (100)
        Send ("!{TAB}")
    Sleep (50)
        Send ("{F2}")
        Send ("^v")
        Send ("{ENTER}")
        Send ("{HOME}")
        Send ("{ENTER}")
    Sleep (1000)
        ControlClick("SAISIE DU NOM DE FICHIER","","[CLASS:Edit; INSTANCE:1]","left")
            If @error = 1 Then
            Exit
        EndIf
    WEnd
EndFunc
 
Vous pourrez voir que j'ai essayé avec le "If @error = 1 Then Exit" Je dois pas être loin de la vérité, mais ça ne fonctionne pas. Pouvez vous jeter un oeil? D'avance merci.

Cdt, Julien.
Modifié en dernier par JulienBoul le mar. 15 déc. 2015 16:28, modifié 1 fois.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [...] Sortir d'une fonction boucle infinie

#2

Message par orax »

Code : Tout sélectionner

$Renommer_pdf = InputBox("SAISIE DU NOM DE FICHIER", "Vous pouvez entrer ici le nom de votre dossier.", "", "", "", "", 100, 100)
If $Renommer_pdf = "" Then ExitLoop
Si rien n'est entré dans le InputBox alors on sort de la boucle.
Le GuiCreate... n'avait pas de sens donc je l'ai supprimé.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [...] Sortir d'une fonction boucle infinie

#3

Message par JulienBoul »

Yahou, ça fonctionne, je pensais à l'envers, c'est tellement logique... 6 heures consécutives que je suis dans mes programmes, je ne suis plus très lucide. Concernant le GuiCreate n'est ce pas ce qui permet à ma inputbox de rester au premier plan?
Je passe en résolu, c'était super rapide merci !

Orax = :idea:
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [...] Sortir d'une fonction boucle infinie

#4

Message par orax »

JulienBoul a écrit :Concernant le GuiCreate n'est ce pas ce qui permet à ma inputbox de rester au premier plan?
Ah oui en effet. J'ai trouvé ça un peu bizarre.
Éventuellement je ferais plutôt comme ça, pour supprimer la GUI juste après la boucle.
► Afficher le texte
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [R] Sortir d'une fonction boucle infinie

#5

Message par JulienBoul »

Hello,
Ouep, c'est plus propre ainsi.
Par ailleurs, j'ai supprimé le

Code : Tout sélectionner

If @error = 1 Then
Exit
A ce stade, et avec ta solution, il ne sert plus.

Encore merci pour ta réactivité et tes conseils. A+
Répondre