[R] Problème avec un Label

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
nav53
Niveau 1
Niveau 1
Messages : 12
Enregistré le : jeu. 06 janv. 2011 18:30
Status : Hors ligne

[R] Problème avec un Label

#1

Message par nav53 »

Bonjour,
Voilà j'ai un problème avec le programme que je suis en train de faire, toutes les fonctions marchent correctement mais dans une situation bien précise. Le bug est en fait un label ($Label4 de la fonction _ping($IP)) qui apparait alors qu'il ne le devrait pas.
Pour déclencher le problème, je lance le programme, je fais un ping à l'aide du bouton "Ping" (l'adresse du ping ne joue pas sur le probleme) puis une fois le ping fait je vais directement dans le menu "Ipconfig" puis dès que je coche la case "/all" le probleme apparait. Je précise que ça ne le fait pas avec les autres "checkbox" pourtant il me semble qu'elles ont la même syntaxe de fonction.

Voici le code pour que vous voyez le soucis :

Code : Tout sélectionner

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiIPAddress.au3>
#include <Constants.au3>


#Region ### START Koda GUI section ### Form=C:\scripts\Form1.kxf
$Form1 = GUICreate("Prog v1.0", 633, 438)
Global $Fichiermenu = GUICtrlCreateMenu("Fichier")
Global $Quitteritem = GUICtrlCreateMenuItem("Quitter  Alt+F4", $Fichiermenu)
Global $Editionmenu = GUICtrlCreateMenu("Edition")
Global $Couperitem = GUICtrlCreateMenuItem("Couper   Ctrl+X", $Editionmenu)
Global $Copieritem = GUICtrlCreateMenuItem("Copier    Ctrl+C", $Editionmenu)
Global $Colleritem = GUICtrlCreateMenuItem("Coller     Ctrl+V", $Editionmenu)
Global $Effaceritem = GUICtrlCreateMenuItem("Effacer", $Editionmenu)
Global $Aidemenu = GUICtrlCreateMenu("Aide")
Global $Apropositem = GUICtrlCreateMenuItem("A Propos ...", $Aidemenu)
Global $Button1 = GUICtrlCreateButton("Ipconfig", 148, 376, 81, 33, $WS_GROUP)
Global $Button2 = GUICtrlCreateButton("Ping", 392, 376, 81, 33, $WS_GROUP)
Global $Button3 = GUICtrlCreateButton("Effacer", 16, 208, 65, 33, $WS_GROUP)
Global $Button4 = GUICtrlCreateButton("Release", 555, 154, 65, 33, $WS_GROUP)
Global $Button5 = GUICtrlCreateButton("Renew", 555, 262, 65, 33, $WS_GROUP)
Global $Text = GUICtrlCreateEdit("", 104, 80, 433, 281, BitOR($ES_MULTILINE,$ES_AUTOVSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_TABSTOP,$WS_VSCROLL,$WS_VISIBLE,$WS_CHILD))
Global $enabled = 0
Global $child = 0
Global $child2 = 0
Global $Buttonfermer = GUICtrlCreateButton("Fermer", 160, 56, 75, 25)
Global $Buttonlancer = GUICtrlCreateButton("Lancer", 20, 56, 75, 25)
Global $Buttonfermer2 = GUICtrlCreateButton("Fermer", 200, 80, 75, 25)
Global $Buttonlancer2 = GUICtrlCreateButton("Lancer", 20, 80, 75, 25)
Global $Checkbox1 = GUICtrlCreateCheckbox("-a", 150, 50, 75, 25)
Global $Checkbox2 = GUICtrlCreateCheckbox("/all", 8, 40, -1, -1)
Global $Checkbox3 = GUICtrlCreateCheckbox("/flushdns", 100, 40, -1, -1)
Global $Checkbox4 = GUICtrlCreateCheckbox("/displaydns", 210, 40, -1, -1)
Global $Label2 = GUICtrlCreateLabel("Ping :", 8, 50, 120, 17)
GUICtrlSetState($Buttonfermer, $GUI_HIDE)
GUICtrlSetState($Buttonlancer, $GUI_HIDE)
GUICtrlSetState($Checkbox1, $GUI_HIDE)
GUICtrlSetState($Checkbox2, $GUI_HIDE)
GUICtrlSetState($Checkbox3, $GUI_HIDE)
GUICtrlSetState($Checkbox4, $GUI_HIDE)
GUICtrlSetState($Label2, $GUI_HIDE)
GUICtrlSetState($Buttonfermer2, $GUI_HIDE)
GUICtrlSetState($Buttonlancer2, $GUI_HIDE)
$IPAddress1 = _GUICtrlIpAddress_Create($child, 104, 24, 130, 21)
_GUICtrlIpAddress_Set($IPAddress1, "0.0.0.0")
$separation1 = GUICtrlCreateMenuItem("", $Editionmenu, 3)   ; Créer une ligne de séparation

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


$fichier = @WindowsDir
$fichierread = FileRead ( $fichier & " \ipconfig.txt " )
$Os = @OSVersion

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
    Case $GUI_EVENT_CLOSE
        FileDelete("C:\WINDOWS\ipconfig.txt")
        FileDelete("C:\WINDOWS\ping.txt")
        FileDelete("C:\WINDOWS\release.txt")
        FileDelete("C:\WINDOWS\renew.txt")
        Fin()
    Case $Button1
        $child2 = GUICreate("Ipconfig", 300, 140, -1, -1, $WS_EX_TOOLWINDOW, -1, $Form1)
        $Label3 = GUICtrlCreateLabel("ipconfig :", 8, 14, 120, 17)
        $Checkbox2 = GUICtrlCreateCheckbox("/all", 8, 40, -1, -1)
        $Checkbox3 = GUICtrlCreateCheckbox("/flushdns", 100, 40, -1, -1)
        $Checkbox4 = GUICtrlCreateCheckbox("/displaydns", 210, 40, -1, -1)
        $Buttonfermer2 = GUICtrlCreateButton("Fermer", 200, 80, 75, 25)
        $Buttonlancer2 = GUICtrlCreateButton("Lancer", 20, 80, 75, 25)
        GUISetState()
        $enabled = 0
        WinSetOnTop($child2, "", 1)
        GUISetState(@SW_DISABLE, $Form1)
    Case $Checkbox2
        _Checkbox2Click()
    Case $Checkbox3
        _Checkbox3Click()
    Case $Checkbox4
        _Checkbox4Click()
    Case $Button3
        GUICtrlSetData($Text, "")
    Case $Button4
        RunWait(@ComSpec & " /c ipconfig /release > " & "C:\WINDOWS\release.txt", "", @SW_HIDE)
        GUICtrlSetData($Text, FileRead($fichier & "\release.txt"))
        If $OS = "WIN_7" Then GUICtrlSetData($Text, _OEMToAnsi(GUICtrlRead($Text)))
        If $OS = "WIN_VISTA" Then GUICtrlSetData($Text, _OEMToAnsi(GUICtrlRead($Text)))
    Case $Button5
        RunWait(@ComSpec & " /c ipconfig /renew > " & "C:\WINDOWS\renew.txt", "", @SW_HIDE)
        GUICtrlSetData($Text, FileRead($fichier & "\renew.txt"))
        If $OS = "WIN_7" Then GUICtrlSetData($Text, _OEMToAnsi(GUICtrlRead($Text)))
        If $OS = "WIN_VISTA" Then GUICtrlSetData($Text, _OEMToAnsi(GUICtrlRead($Text)))
    Case $Buttonlancer2
        _LancerIpconfig()
        GUICtrlSetData($Text, FileRead($fichier & "\ipconfig.txt"))
        If $OS = "WIN_7" Then GUICtrlSetData($Text, _OEMToAnsi(GUICtrlRead($Text)))
        If $OS = "WIN_VISTA" Then GUICtrlSetData($Text, _OEMToAnsi(GUICtrlRead($Text)))
        GUIDelete($child2)
        $enabled = 1
        GUISetState(@SW_ENABLE, $Form1)
        WinSetOnTop($Form1, "", 1)
    Case $Buttonfermer2
        GUIDelete($child2)
        $enabled = 1
        GUISetState(@SW_ENABLE, $Form1)
        WinSetOnTop($Form1, "", 1)

    Case $Quitteritem
        FileDelete("C:\WINDOWS\ipconfig.txt")
        FileDelete("C:\WINDOWS\ping.txt")
        FileDelete("C:\WINDOWS\release.txt")
        FileDelete("C:\WINDOWS\renew.txt")
        Fin()
    Case $Apropositem
        MsgBox(64, "A Propos", "Prog v1.0" & @CRLF & "Développé par : " & @CRLF & "Companie :" & @CRLF & @CRLF & "Compatible : Windows XP / Windows Vista / Windows 7", -1, $Form1)
    Case $Couperitem
        Send("{CTRLDOWN}")
        Send("x")
        Send("{CTRLUP}")
    Case $Copieritem
        Send("{CTRLDOWN}")
        Send("c")
        Send("{CTRLUP}")
    Case $Colleritem
        Send("{CTRLDOWN}")
        Send("v")
        Send("{CTRLUP}")
    Case $Effaceritem
        GUICtrlSetData($Text, "")

EndSwitch
Select
    Case $nMsg = $GUI_EVENT_CLOSE
        Exit
    Case Not $enabled And Not WinExists($child)
            $enabled = 1
            GUISetState(@SW_ENABLE, $Form1)
    Case $nMsg = $Button2
        $child = GUICreate("Ping", 300, 140, -1, -1, $WS_EX_TOOLWINDOW,-1,$Form1)
        $Buttonfermer = GUICtrlCreateButton("Fermer", 200, 80, 75, 25)
        $Buttonlancer = GUICtrlCreateButton("Lancer", 20, 80, 75, 25)
        $Label1 = GUICtrlCreateLabel("Saisir l'adresse à pinger :", 8, 24, 120, 17)
        $Label2 = GUICtrlCreateLabel("Ping :", 8, 50, 120, 17)
        $Checkbox1 = GUICtrlCreateCheckbox("-a", 140, 50, -1, -1)
        $IPAddress1 = _GUICtrlIpAddress_Create($child, 140, 24, 130, 17)
        GUISetState()
        $enabled = 0
        WinSetOnTop($child, "", 1)
        GUISetState(@SW_DISABLE, $Form1)
    Case $nMsg = $Buttonlancer
        _choix()
        GUICtrlSetData($Text, FileRead($fichier & "\ping.txt"))
        If $OS = "WIN_7" Then GUICtrlSetData($Text, _OEMToAnsi(GUICtrlRead($Text)))
        If $OS = "WIN_VISTA" Then GUICtrlSetData($Text, _OEMToAnsi(GUICtrlRead($Text)))
        If $OS = "WIN_XP" Then GUICtrlSetData($Text, _OEMToAnsi(GUICtrlRead($Text)))

    Case $nMsg = $Buttonfermer
        GUIDelete($child)
        $enabled = 1
        GUISetState(@SW_ENABLE, $Form1)
        WinSetOnTop($Form1, "", 1)

EndSelect
WEnd

Func Fin()

    SplashTextOn("", "Fermeture du programme en cours,  Veuillez patienter ...", 450, 70, -1, -1, 0 + 1 + 16 + 32, "Times New Roman", 12, 800)
    Sleep(2000)
    SplashOff()
    Exit
EndFunc


Func _OEMToAnsi($sOEM)
    Local $a_AnsiFName = DllCall('user32.dll', 'Int', 'OemToChar', 'str', $sOEM, 'str', '')
    If @error = 0 Then $sAnsi = $a_AnsiFName[2]
    Return $sAnsi
EndFunc   ;==>_OEMToAnsi

Func _ping($IP)
    ; on met un petit écran d'attente
    $Form2 = GUICreate("Patience", 229, 94, -1, -1, $DS_MODALFRAME, -1, $child)
    $Label4 = GUICtrlCreateLabel("Ping en cours." & @CRLF & "Veuillez patienter quelques instants ...", 24, 16, -1, -1)
    GUISetState(@SW_SHOW, $Form2)



    Local $erreur = False
    Local $blocs[5], $i
    ; on check l'IP
    $blocs = StringSplit($IP, ".")
    For $i = 1 To 4
        If $blocs[$i] < 0 Or $blocs[$i] > 255 Then $erreur = True
        ConsoleWrite($blocs[$i] & @CRLF)
    Next

    If $erreur = False Then ; si c'est bon, on ping
        RunWait(@ComSpec & " /c ping " & $IP & " > " & "c:\WINDOWS\ping.txt", "", @SW_HIDE)
        GUIDelete($Form2) ; on enleve l'écran d'attente
        If @error = 0 Then ; et on affiche le résultat (Ok ou erreur)
            MsgBox(0, "Ping", "Ping effectué.", -1, $child)
            GUIDelete($child)
            $enabled = 0
            GUISetState(@SW_ENABLE, $Form1)
            WinSetOnTop($Form1, "", 1)
        Else
            MsgBox(0, "Ping", "Le ping a échoué !", -1, $child)
        EndIf
    Else ; si c'est pas bon, on l'indique
        MsgBox(0, "Ping", "Format de l'adresse IP non valide", -1, $child)
    EndIf
EndFunc

Func _pinga($IP)
    ; on met un petit écran d'attente
    $Form2 = GUICreate("Patience", 229, 94, -1, -1, $DS_MODALFRAME, -1, $child)
    GUISetState(@SW_SHOW, $Form2)
    $Label4 = GUICtrlCreateLabel("Ping en cours." & @CRLF & "Veuillez patienter quelques instants ...", 24, 16, -1, -1)

    Local $erreur = False
    Local $blocs[5], $i
    ; on check l'IP
    $blocs = StringSplit($IP, ".")
    For $i = 1 To 4
        If $blocs[$i] < 0 Or $blocs[$i] > 255 Then $erreur = True
        ConsoleWrite($blocs[$i] & @CRLF)
    Next

    If $erreur = False Then ; si c'est bon, on ping
        RunWait(@ComSpec & " /c ping -a " & $IP & " > " & "c:\WINDOWS\ping.txt", "", @SW_HIDE)
        GUISetState(@SW_HIDE, $Form2)       ; on enleve l'écran d'attente
        If @error = 0 Then ; et on affiche le résultat (Ok ou erreur)
            MsgBox(0, "Ping", "Ping effectué.", -1, $child)
            GUIDelete($child)
            $enabled = 1
            GUISetState(@SW_ENABLE, $Form1)
            WinSetOnTop($Form1, "", 1)
        Else
            MsgBox(0, "Ping", "Le ping a échoué !", -1, $child)
        EndIf
    Else ; si c'est pas bon, on l'indique
        MsgBox(0, "Ping", "Format de l'adresse IP non valide", -1, $child)
    EndIf
EndFunc

Func _choix()
    If GUICtrlRead($Checkbox1) = 1 Then
        _pinga(_GUICtrlIpAddress_Get($IPAddress1))
    Else
        _ping(_GUICtrlIpAddress_Get($IPAddress1))
    EndIf
EndFunc

Func _Checkbox2Click()
    If GUICtrlRead($Checkbox2) = 1 Then
        GUICtrlSetState($Checkbox3, $GUI_DISABLE)
        GUICtrlSetState($Checkbox4, $GUI_DISABLE)
    Else
        GUICtrlSetState($Checkbox3, $GUI_ENABLE)
        GUICtrlSetState($Checkbox4, $GUI_ENABLE)

    EndIf
EndFunc

Func _Checkbox3Click()
    If GUICtrlRead($Checkbox3) = 1 Then
        GUICtrlSetState($Checkbox2, $GUI_DISABLE)
        GUICtrlSetState($Checkbox4, $GUI_DISABLE)
    Else
        GUICtrlSetState($Checkbox2, $GUI_ENABLE)
        GUICtrlSetState($Checkbox4, $GUI_ENABLE)

    EndIf
EndFunc

Func _Checkbox4Click()
    If GUICtrlRead($Checkbox4) = 1 Then
        GUICtrlSetState($Checkbox2, $GUI_DISABLE)
        GUICtrlSetState($Checkbox3, $GUI_DISABLE)
    Else
        GUICtrlSetState($Checkbox2, $GUI_ENABLE)
        GUICtrlSetState($Checkbox3, $GUI_ENABLE)

    EndIf
EndFunc

Func _LancerIpconfig()
    If GUICtrlRead($Checkbox2) = 1 Then RunWait(@ComSpec & " /c ipconfig /all > " & "c:\WINDOWS\ipconfig.txt", "", @SW_HIDE)
    If GUICtrlRead($Checkbox3) = 1 Then RunWait(@ComSpec & " /c ipconfig /flushdns > " & "c:\WINDOWS\ipconfig.txt", "", @SW_HIDE)
    If GUICtrlRead($Checkbox4) = 1 Then RunWait(@ComSpec & " /c ipconfig /displaydns > " & "c:\WINDOWS\ipconfig.txt", "", @SW_HIDE)
EndFunc
Merci d'avance
Modifié en dernier par nav53 le ven. 14 janv. 2011 14:19, modifié 1 fois.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..]Bug programme, besoin d'aide pour trouver l'erreur

#2

Message par TommyDDR »

Votre probleme est que vous avez PLUSIEURS :
- $CheckboxX = GUICtrlCreateCheckbox(...)
- $Buttonlancer = GUICtrlCreateButton(...)

Donc vos variables sont réafecté à chaque fois.

Quand vous pingez, votre $Checkbox2 = $Bouttonlancer

Et comme vous n'êtes pas en mode évenementiel (ce qui serait moins barbar) et bien vos switch entrent dans les fonctions de ces 2 controles.

Au vu des modifications à apporter, je vous conseille fortement de passer en mode évenementiel qui est, je trouve, plus simple au final et permet d'avoir une certaine organisation dans ses programmes.

En bon gentelman (Hehe ^^) je vous fourni un exemple de base utilisant le mode evenementiel :
► Afficher le textecode
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
nav53
Niveau 1
Niveau 1
Messages : 12
Enregistré le : jeu. 06 janv. 2011 18:30
Status : Hors ligne

Re: [..] Problème avec un Label

#3

Message par nav53 »

ok merci je vais essayer avec cette méthode
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème avec un Label

#4

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é".
nav53
Niveau 1
Niveau 1
Messages : 12
Enregistré le : jeu. 06 janv. 2011 18:30
Status : Hors ligne

Re: [..] Problème avec un Label

#5

Message par nav53 »

Je viens tout juste de réadapter le script avec cette méthode et tout à l'air de fonctionner.
Merci pour la réponse et désolé pour le temps de résolution ^^
Répondre