[..] La gestion d'erreur que j'ai codé revient trop souvent

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Ekow
Niveau 4
Niveau 4
Messages : 58
Enregistré le : sam. 11 déc. 2010 14:40
Status : Hors ligne

[..] La gestion d'erreur que j'ai codé revient trop souvent

#1

Message par Ekow »

Bonjour à tous !
J'ai un petit problème j'ai codé une gestion d'erreur sous condition (très simple) mais le problème c'est que même si je fait la bonne commande il affiche une erreur...
Regarder un bout de code :

Code : Tout sélectionner

Func Add_cmd($param1, $param2)
    If $commande = $param1 Then
        FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $commande)
    Run ($param2)
    $commande = InputBox("ShellRoot", "Commandes :", "", "", 1, 1, 0, 0)
Else
    FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & "ERROR")
    MsgBox(4096, "Error", "Commande invalide, veuillez resaisir la commande")
    $commande = InputBox("ShellRoot", "Commandes :", "", "", 1, 1, 0, 0)
EndIf
EndFunc

Func Add_cmd2($param3, $param4)
    If $commande = $param3 Then
        FileWriteLine($file2, @WDAY & " " & @MON & " " & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $commande)
    ShellExecute($param4)
    $commande = InputBox("ShellRoot", "Commandes :", "", "", 1, 1, 0, 0)
Else
    FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & "ERROR")
    MsgBox(4096, "Error", "Commande invalide, veuillez resaisir la commande")
    $commande = InputBox("ShellRoot", "Commandes :", "", "", 1, 1, 0, 0)
EndIf
EndFunc
 
Ce sont deux de mes fonctions qui contienne la gestion d'erreur.
Et voici un petit exemple :
Lorsque je tape une commande qui génère une erreur -> "aa" -> il affiche ma fenêtre d'erreur -> et lorsque je tape la bonne commande comme par exemple : msdos -> elle effectue parfois la bonne commande et des fois elle affiche l'erreur même si c'est la bonne commande...

Je ne sait pas si mon message est assez explicite mais si ce n'est pas le cas vous pouvez me demander plus d'explications.
Merci d'avance
Cordialement Ekow
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] La gestion d'erreur que j'ai codé revient trop souvent

#2

Message par zeshrek »

C'est bien beau de nous donner juste le bout de script, mais on manque un peu d'informations.
Pour qu'on puisse t'aider il faudrait que tu nous dises :
- ce que tu passes en $param1 $param2$param3 et $param4.
- la valeur de $commande
En clair un exemple concret.
Ou alors tu nous donnes le script en entier, qu'on puisse faire des éssais
Si vis pacem para bellum
Avatar du membre
Ekow
Niveau 4
Niveau 4
Messages : 58
Enregistré le : sam. 11 déc. 2010 14:40
Status : Hors ligne

Re: [..] La gestion d'erreur que j'ai codé revient trop souvent

#3

Message par Ekow »

Bien sur voila plus d'informations :
- $param1 = Nom du programme
- $param2 = Chemin d'installation du programme
Idem pour $param3 et 4

Et $commande = Nom du programme

Exemple concret (dont un bout de code) :

Code : Tout sélectionner

Add_cmd("msdos", 'cmd.exe')
Cette exemple utilise la fonction numéro 1.

Code : Tout sélectionner

Add_cmd2("hyper terminal", "C:\Program Files\Windows NT\hypertrm.exe")
Cette exemple utilise la fonction numéro 2.

Et en gros mon programme fait un peu la même chose que le simple Win + R (éxécuter) de windows sauf que la les erreurs viennent trop souvent même quand cela est correct.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] La gestion d'erreur que j'ai codé revient trop souvent

#4

Message par Tlem »

Il semble que vous déclariez la variable $commande dans une autre partie de votre script et pour les exemples que vous donnez, vous ne nous indiquez pas la valeur de celle-ci.
Bien que vous précisez qu'elle doit être égale à $param1, je pense que ce ne doit pas être le cas tout le temps (sinon il n'y aurait aucun intérêt de faire ce test).

Je ne sais pas d’où vous récupérez cette variable, mais selon toute vraisemblance, le problème viendrait de là.
Vérifiez bien que dans le choix de cette variable, il n'y ai pas un retour de ligne ou autre caractère parasite afin que la condition If $commande = $param1 Then puisse être vérifiée correctement.

De plus, je vous suggère de rajouter dans les paramètres de vos fonctions la prise en charge de la variable $commande, car cela pourrait plus tard être source de problèmes.
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é".
Avatar du membre
Ekow
Niveau 4
Niveau 4
Messages : 58
Enregistré le : sam. 11 déc. 2010 14:40
Status : Hors ligne

Re: [..] La gestion d'erreur que j'ai codé revient trop souvent

#5

Message par Ekow »

Merci
Je vais essayer de revoir mon code et je vous tien au courant =)
Avatar du membre
Ekow
Niveau 4
Niveau 4
Messages : 58
Enregistré le : sam. 11 déc. 2010 14:40
Status : Hors ligne

Re: [..] La gestion d'erreur que j'ai codé revient trop souvent

#6

Message par Ekow »

Hum c'est embarrassant , j'ai essayer de mettre la gestion d'erreur au endroit manquant mais cela devient pire...
A chaque commande il affiche le message d'erreur...

Dans votre message :
Tlem a écrit :Il semble que vous déclariez la variable $commande dans une autre partie de votre script et pour les exemples que vous donnez, vous ne nous indiquez pas la valeur de celle-ci.
Bien que vous précisez qu'elle doit être égale à $param1, je pense que ce ne doit pas être le cas tout le temps (sinon il n'y aurait aucun intérêt de faire ce test).

Je ne sais pas d’où vous récupérez cette variable, mais selon toute vraisemblance, le problème viendrait de là.
Vérifiez bien que dans le choix de cette variable, il n'y ai pas un retour de ligne ou autre caractère parasite afin que la condition If $commande = $param1 Then puisse être vérifiée correctement.

De plus, je vous suggère de rajouter dans les paramètres de vos fonctions la prise en charge de la variable $commande, car cela pourrait plus tard être source de problèmes.
Lorsque $commande n'est pas égale à $param1 je n'utilise tous simplement pas la fonction =) si je n'utilise pas la fonction je rajoute ma gestion d'erreur dans le bloc de commande.

La ma question serait :
[*] Est ce que la façon de géré l'erreur n'est pas bonne ? Le code est incorrect ?

Suite à votre réponse j'essayerais une dernière tentative ensuite je vous partagerais le script ^^
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] La gestion d'erreur que j'ai codé revient trop souvent

#7

Message par Tlem »

Ekow a écrit :Lorsque $commande n'est pas égale à $param1 je n'utilise tous simplement pas la fonction =)
Ha bon !!!

Mais dans ce cas à quoi peut bien servir cette ligne If $commande = $param1 Then :roll: :lol:
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é".
Avatar du membre
Ekow
Niveau 4
Niveau 4
Messages : 58
Enregistré le : sam. 11 déc. 2010 14:40
Status : Hors ligne

Re: [..] La gestion d'erreur que j'ai codé revient trop souvent

#8

Message par Ekow »

Voila un exemple qui pourra t'éclairer... y a rien de rigolo =)
Ma function :

Code : Tout sélectionner

Func Add_cmd($param1, $param2)
    If $commande = $param1 Then
        FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $commande)
    Run ($param2)
    $commande = InputBox("ShellRoot", "Commandes :", "", "", 1, 1, 0, 0)
    Else
    FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & "ERROR")
    MsgBox(4096, "Error", "Commande invalide, veuillez resaisir la commande")
EndIf
EndFunc
Utilisation de la fonction :

Code : Tout sélectionner

Add_cmd("msdos", 'cmd.exe'
Bloc de commande plus complexe et inutilisable par ma ou mes fonctions :

Code : Tout sélectionner

If $commande = "file mode" Then
        FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $commande)
        $file = InputBox("ShellRoot FileMode", "File :", "", "", 1, 1, 0, 0)
        If $file = "create file" Then
            FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $file)
            $file = InputBox("ShellRoot FileMode", "File :", "", "", 1, 1, 0, 0)
        _FileCreate($file)
    EndIf
        If $file = "delete file" Then
            FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $file)
            $file = InputBox("ShellRoot FileMode", "File :", "", "", 1, 1, 0, 0)
        FileDelete($file)
    EndIf
    If $file = "copy file" Then
         FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $file)
         $src = InputBox("ShellRoot CopyMode", "Source:", "", "", "", 1, 1, 0, 0)
         $dest = InputBox("ShellRoot CopyMode", "Destination :", "", "", "", 1, 1, 0, 0)
         FileCopy($src, $dest)
     EndIf
        If $file = "exit" Then
            FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $file)
        $commande = InputBox("ShellRoot", "Commandes :", "", "", 1, 1, 0, 0)
    EndIf
EndIf
Mes fonctions ne servent qu'à économiser quelque lignes de code.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] La gestion d'erreur que j'ai codé revient trop souvent

#9

Message par GaRydelaMer »

Bonjour

je crois que tu as pas compris ce que Tlem a voulu te dire et non pas se moquer de toi ou trouver ca drôle:

Mais dans tes fonctions tu déclares pas la variables $command(e).

Tu devrais relire la Doc sur la protées des variables, et surtout mettre ca en début de ton code:

Code : Tout sélectionner

Opt("MustDeclareVars", 1)
, pour t'obliger à déclarer tes variables et ainsi trouver les erreurs comme celle que tu es en train de faire.

Regarde cette fonction que tu as écrit:

Code : Tout sélectionner

Func Add_cmd($param1, $param2)
    If $commande = $param1 Then
        FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $commande)
    Run ($param2)
    $commande = InputBox("ShellRoot", "Commandes :", "", "", 1, 1, 0, 0)
    Else
    FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & "ERROR")
    MsgBox(4096, "Error", "Commande invalide, veuillez resaisir la commande")
EndIf
EndFunc
On suppose que tu veux appelé cette fonction comme ca: Add_cmd("xparam1", "yparam2")

Ton 1er If va comparer $param1 (xparam1) à la valeur de la variable $commande qui est pas déclarer que contient cette variables ??? donc l'expression est jamais vérifier un peu comme

Code : Tout sélectionner

If 1 = 0 Then
ensuite tu lui affecte une valeur $commande = InputBox("ShellRoot", "Commandes :", "", "", 1, 1, 0, 0), donc je vais supposer que ta variables est globale donc déclarer avant l'utilisation des fonctions.

Voila de quoi réfléchir.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] La gestion d'erreur que j'ai codé revient trop souvent

#10

Message par GaRydelaMer »

En relisant ton code "plus complexe" je ferais beaucoup plus simple:

Remplace tes Inputbox par des FileOpenDialog, FileSaveDialog et FileSelectFolder.

Tes commandes par une GUI qui les présentera dans une ListBox. Tous ca pour simplifier ton code, la gestion des erreurs.
Avatar du membre
Ekow
Niveau 4
Niveau 4
Messages : 58
Enregistré le : sam. 11 déc. 2010 14:40
Status : Hors ligne

Re: [..] La gestion d'erreur que j'ai codé revient trop souvent

#11

Message par Ekow »

Bonsoir
Tout d'abord merci pour votre explication =) Et pour que vous éclairez un peu mieux je vais vous donnez directement tous mon code afin que vous puissiez voir à quoi correspond $commande. J'ai un peu de mal à me justifier car je ne voit pas vraiment ou vous voulez en venir a moins que vous voulez me dire que au lieu de déclarez ma variable avec une portée global je devrait la déclarez à l'intérieur de ma fonction ?
Bref voila tous mon code enfin mon UDF :

Code : Tout sélectionner

;Bibliothèque de fonctions

Func Cmd_court()
    Add_cmd("notepad", 'notepad.exe')

    Add_cmd("msdos", 'cmd.exe')

    Add_cmd("calculatrice", 'calc.exe')

    Add_cmd("firefox", 'C:\Program Files\Mozilla Firefox\firefox.exe')

    Add_cmd("paint", 'mspaint.exe')

    Add_cmd("clavier visuel", 'osk.exe')

    Add_cmd("gestionnaire d'utilitaires", 'utilman.exe /start')

    Add_cmd("loupe", 'magnify.exe')

    Add_cmd("assistant d'accessibilité", 'accwiz.exe')

    Add_cmd("assistant configuration du réseau", 'rundll32.exe hnetwiz.dll,HomeNetWizardRunDll')

    Add_cmd("assistant nouvelle connexion", 'rundll32.exe netshell.dll,StartNCW')

    Add_cmd("assistant réseau sans fil", 'rundll32.exe shell32.dll,Control_RunDLL NetSetup.cpl,@0,WNSW')

    Add_cmd("connexions réseau", 'explorer.exe ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{7007acc7-3202-11d1-aad2-00805fc1270e}')

    Add_cmd2("hyper terminal", "C:\Program Files\Windows NT\hypertrm.exe")

    Add_cmd("contrôle du volume", 'sndvol32.exe')

    Add_cmd2("lecteur windows média", "C:\Program Files\Windows Media Player\wmplayer.exe")

    Add_cmd("magnétophone", 'sndrec32.exe')

    Add_cmd2("informations système", "C:\Program Files\Fichiers communs\Microsoft Shared\MSInfo\msinfo32.exe")

    Add_cmd("nettoyage système", 'cleanmgr.exe')

    Add_cmd("table des caractères", 'charmap.exe')

    Add_cmd("tâches planifiées", 'explorer.exe ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D6277990-4C6A-11CF-8D87-00AA0060F5BF}')

    Add_cmd("utilitaires de sauvegardes", 'ntbackup.exe')

    Add_cmd2("carnet d'adresses", "C:\Program Files\Outlook Express\wab.exe")

    Add_cmd("connexion bureau à distance", 'mstsc.exe')

    Add_cmd("explorateur windows", 'explorer.exe')

    Add_cmd("synchroniser", 'mobsync.exe')

    Add_cmd("visite guidé de windows xp", 'tourstart.exe')

    Add_cmd("worldpad", 'wordpad.exe')

    Add_cmd("assist. scanner appareil photo", 'wiaacmgr.exe -SelectDevice')

    Add_cmd("dame de pique", 'mshearts.exe')

    Add_cmd("démineur", 'winmine.exe')

    Add_cmd("freecell", 'freecell.exe')

    Add_cmd("pinball", 'PINBALL.EXE')

    Add_cmd("solitaire", 'sol.exe')




    If $commande = "ouvre lecteur" Then
        FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $commande)
        CDTray("E:", "open")
    EndIf

        If $commande = "url mode" Then
            FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $commande)
        $url = InputBox("ShellBoot Url Mode", "Url :", "", "", 1, 1, 0 , 0)
                FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $url)
        ShellExecute($url)
        $url = InputBox("ShellBoot Url Mode", "Url :", "", "", 1, 1, 0 , 0)
        If $url = "exit" Then
             $commande = InputBox("ShellBoot V1.2", "Commandes :", "", "", 1, 1, 0, 0)
        EndIf
    EndIf

    ;###############################################################
    ;                   Bloc de commande pour fichier
    ;###############################################################
    If $commande = "file mode" Then
        FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $commande)
        $file = InputBox("ShellBoot FileMode", "File :", "", "", 1, 1, 0, 0)
        If $file = "create file" Then
            FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $file)
            $file = InputBox("ShellBoot FileMode", "File :", "", "", 1, 1, 0, 0)
        _FileCreate($file)
    EndIf
        If $file = "delete file" Then
            FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $file)
            $file = InputBox("ShellBoot FileMode", "File :", "", "", 1, 1, 0, 0)
        FileDelete($file)
    EndIf
    If $file = "copy file" Then
         FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $file)
         $src = InputBox("ShellBoot CopyMode", "Source:", "", "", "", 1, 1, 0, 0)
         $dest = InputBox("ShellBoot CopyMode", "Destination :", "", "", "", 1, 1, 0, 0)
         FileCopy($src, $dest)
     EndIf
     If $file = "clear log" Then
         FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $file)
         FileDelete("C:\Program Files\ShellBoot\Data\Log.txt")
         _FileCreate("C:\Program Files\ShellBoot\Data\Log.txt")
         MsgBox(0, "Succès", "Log effacer !")
     EndIf
        If $file = "exit" Then
            FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $file)
         $commande = InputBox("ShellBoot V1.2", "Commandes :", "", "", 1, 1, 0, 0)
    EndIf
EndIf
    ;#################################################################
    ;                   Fin du bloc de commande
    ;#################################################################

    If $commande = "exit" Then
        $exe = False
        Exit
    EndIf
EndFunc

Func Add_cmd($param1, $param2)
    If $commande = $param1 Then
        FileWriteLine($file2, @WDAY & "-" & @MON & "-" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $commande)
    Run ($param2)
    $commande = InputBox("ShellBoot V1.2", "Commandes :", "", "", 1, 1, 0, 0)
EndIf
EndFunc

Func Add_cmd2($param3, $param4)
    If $commande = $param3 Then
        FileWriteLine($file2, @WDAY & " " & @MON & " " & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " & $commande)
    ShellExecute($param4)
     $commande = InputBox("ShellBoot V1.2", "Commandes :", "", "", 1, 1, 0, 0)
EndIf
EndFunc



 
J'espère qu'avec sa cela deviendra plus clair afin que vous puissiez m'éclairez encore plus. J'ai du mal à voir tous de suite mes erreurs cela vient de mon niveau , je suis encore débutant.
Avatar du membre
Ekow
Niveau 4
Niveau 4
Messages : 58
Enregistré le : sam. 11 déc. 2010 14:40
Status : Hors ligne

Re: [..] La gestion d'erreur que j'ai codé revient trop souvent

#12

Message par Ekow »

Ps : J'ai enlever la gestion d'erreur ici vu qu'elle ne fonctionner pas ^^
Et pour votre dernier message je vous remercie je vais me renseigner sur ces commandes =)
Répondre