[R] Pas de réponse des boutons

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
flodiable
Niveau 2
Niveau 2
Messages : 26
Enregistré le : jeu. 09 juin 2011 11:04
Status : Hors ligne

[R] Pas de réponse des boutons

#1

Message par flodiable »

Bonjour à tous :twisted: !

J'ai déjà fait quelques scripts mais dans celui là je ne comprends pas pourquoi lorsque j'appuie sur mes boutons il ne se passe rien T_T !

J'ai beau regarder l'aide ou d'autre ancien script j'arrive à comprendre >< !
► Afficher le texte
Pitié à l'aide :oops: :oops:

Edit : Et ce que je comprend encore moins c'est que le bouton pour fermer la fenetre ($GUI_EVENT_CLOSE) fonctionne très bien...
Modifié en dernier par flodiable le jeu. 30 juin 2011 14:43, modifié 1 fois.
zarnergun
Niveau 3
Niveau 3
Messages : 46
Enregistré le : lun. 27 juin 2011 21:21
Status : Hors ligne

Re: [..] Pas de réponse des boutons

#2

Message par zarnergun »

Salut,

Je suis débutant en AutoIt mais j'ai comme l'impression que tes boutons sont créés mais non assignés à une fonction ?!
Comme quand on fait :

[code=text]Case Bouton
       mafonction()[/code]

Recrification : au vue de la doc, je pense qu'il te manque un opt()


Re-rectification : Tu utilises pas la bonne fonction, c'est "GUICtrlSetOnEvent " pour une fonction user
Modifié en dernier par zarnergun le jeu. 30 juin 2011 14:36, modifié 1 fois.
flodiable
Niveau 2
Niveau 2
Messages : 26
Enregistré le : jeu. 09 juin 2011 11:04
Status : Hors ligne

Re: [..] Pas de réponse des boutons

#3

Message par flodiable »

Tu as commencé me mettre sur la voix car effectivement l'instruction

Code : Tout sélectionner

Opt("GUIOnEventMode", 1)
n'était pas au bon niveau mais même en l'intégrant après mes #include sa ne marche pas.

Il y a 2 moyen d'utiliser les event d'une GUI de ce que j'ai compris la mienne est la 2eme c'est une question de préférence mais j'ai bien associer mes boutons à une fonction avec :

Code : Tout sélectionner

$btn_dxdiag = GUICtrlCreateButton("dxdiag", 100, 120,60,30,0)
    GUISetOnEvent(-1, "dxdiag")
le bouton est sensé appeler la fonction dxdiag suivant :

Code : Tout sélectionner

Func dxdiag()
    MsgBox(0,"","Hola dxdiag !")
    ShellExecuteWait("dxdiag")  
EndFunc
mais il ne se passe toujours rien :/
zarnergun
Niveau 3
Niveau 3
Messages : 46
Enregistré le : lun. 27 juin 2011 21:21
Status : Hors ligne

Re: [..] Pas de réponse des boutons

#4

Message par zarnergun »

Désolé j'ai éditer 3 fois, mon dernier edit te donnera la solution
flodiable
Niveau 2
Niveau 2
Messages : 26
Enregistré le : jeu. 09 juin 2011 11:04
Status : Hors ligne

Re: [R] Pas de réponse des boutons

#5

Message par flodiable »

je me doutais que c'était un truc bete comme le monde dsl pour le topic T_T

Merci à toi zanergun ;)

Passé en résolu!
zarnergun
Niveau 3
Niveau 3
Messages : 46
Enregistré le : lun. 27 juin 2011 21:21
Status : Hors ligne

Re: [R] Pas de réponse des boutons

#6

Message par zarnergun »

Pas de quoi ;) les trucs bêtes ça arrivent a tous les débutants ça
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Pas de réponse des boutons

#7

Message par ZDS »

Bonjour,

Ma "réponse" ne va pas te plaire, mais pour un script aussi simple (et même tout simplement pour une histoire de compréhension et de simplicité de l'algo de ton code), pourquoi te génères-tu des "problèmes" à utiliser un OEM? Voici une version modifiée de ton script qui fonctionne en GGM :

PS: Le sleep de 3 secondes en pleine boucle de traitement, c'est pas très très recommandé. Utilise plutôt un stockage de la précédente valeur, et actualise le label seulement si elle change (cf code précédent).
PS2 : Pas génial du tout de recréer un label par dessus une variable commune $lbl_HDD.
PS3 : Vu les soucis de sécurité actuelles, autant préférer la Xbox ^^

A bientôt!
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
flodiable
Niveau 2
Niveau 2
Messages : 26
Enregistré le : jeu. 09 juin 2011 11:04
Status : Hors ligne

Re: [R] Pas de réponse des boutons

#8

Message par flodiable »

Ce soft n'est qu'au début de création il va surement devenir plus complet, c'est en plus et surtout pour m'exercer donc je suis ouvert a toutes critiques :) !

Alors le sleep de 3000ms c'était juste pour savoir si ce n'était pas la cause de mon problème d'avant, je le règle plutôt à 1000ms.

Je suis bien d'accord pour la recréation de label mais c'est un problème que je pourrais surement régler en constituant une chaîne avec des @CR et en fesant un GUICtrlSetData.

Je le vois pas comme un OEM mais plutôt un petit résumé de la machine, je rajouterai également une partie graphe pour l'occupation CPU et Réseaux mais c'est pour plus tard ^^ !
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [R] Pas de réponse des boutons

#9

Message par ZDS »

Excuse, quand je disais OEM, je disais "On Event Mode", par opposition au GGM "GUIGetMsg".

Je viens de voir que le script que j'avais mis en exemple n'est pas passé; je le reposte ce soir.

EDIT : Voici le script promis, j'ai bouchonné ta fonction concernant les disques durs car elle est complètement bugguée (algorithmiquement en tout cas, cf si tu fais deux tours de boucles $reg_path ajout les deux arbos à la suite => à revoir)

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>

; Sécurité pour débuggage
Global $stop = False
HotKeySet("#{F4}", "stop") ; Arret du script par Win+F4
Func stop()
    If $stop Then Exit ; Si arret déjà en cours, on force l'arret
    $stop = True
EndFunc

#cs
Plus besoin d'utiliser de variables globales pour les items,
ça évite de faire des conneries entre scripts et entre fonctions.
on passe les variables réellement nécessaires en parametres d'appel.
#ce
;~ Global $stats[6]
;~ Global $test_pc
;~ Global $grp_hardware
;~ Global $lbl_cpu,$lbl_RAM,$lbl_HDD,$lbl_GC
;~ Global $btn_update_hardware,$btn_dxdiag,$btn_devmgmt

main()

Func main()
    ;GUI ****************************************
    Local $test_pc = GUICreate("PC", 300, 250, 200, 100)
    ;Group ****************************************
    Local $grp_hardware = GUICtrlCreateGroup("Votre pc : ", 20, 20, 250,200)
    ;label ***************************************
    Local $lbl_cpu = GUICtrlCreateLabel("CPU : mise à jour ....", 30,40, 200, 20)
    Local $lbl_RAM = GUICtrlCreateLabel("RAM : mise à jour ....", 30,60, 200, 20)
    Local $lbl_HDD = GUICtrlCreateLabel("HDD : mise à jour ....", 30,80, 200, 20)
    Local $lbl_GC = GUICtrlCreateLabel("Carte graphique : mise à jour ....", 30,100, 220, 20)
    ;Bouton ******************************************************************************
    Local $btn_update_hardware = GUICtrlCreateButton("Mise à jour", 30, 120,60,30,0)
    Local $btn_dxdiag = GUICtrlCreateButton("dxdiag", 100, 120,60,30,0)
    Local $btn_devmgmt = GUICtrlCreateButton("Périphériques", 170, 120,80,30,0)

    ; Affiche la GUI
    GUISetState(@SW_SHOW)

    ; Traitement des messages
    While Not $stop
        Local $msg = GUIGetMsg()
        Switch $msg
        Case $GUI_EVENT_CLOSE
            stop()
        Case $btn_update_hardware ; Bouton update inutile
;~          change_display($lbl_cpu, $lbl_RAM, $lbl_GC, $lbl_HDD)
        Case $btn_dxdiag
            dxdiag()
        Case $btn_devmgmt
            devmgmt()
        Case Else
            change_display($lbl_cpu, $lbl_RAM, $lbl_GC, $lbl_HDD)
        EndSwitch
    WEnd
EndFunc

Func change_display($_cpu, $_ram, $_gc, $_hdd)
    Local _
        $cpu = "CPU : " & getCpu(), _
        $ram = "RAM : " & getRam(), _
        $gc = "Carte graphique : " & getGc(), _
        $hdd = "HDD : " & getHdd()
    $displayed_value = GUICtrlRead($_cpu)&";"&GUICtrlRead($_ram)&";"&GUICtrlRead($_gc)&";"&GUICtrlRead($_hdd)
    If GUICtrlRead($_cpu) <> $cpu Then  GUICtrlSetData($_cpu, $cpu)
    If GUICtrlRead($_ram) <> $ram Then  GUICtrlSetData($_ram, $ram)
    If GUICtrlRead($_gc)  <> $gc  Then  GUICtrlSetData($_gc,  $gc)
    If GUICtrlRead($_hdd) <> $hdd Then  GUICtrlSetData($_hdd, $hdd)
EndFunc

Func getCpu()
    Return RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0","ProcessorNameString")
EndFunc

Func getRam()
    Local $stats=MemGetStats()
    Return Round($stats[1]-$stats[2],-2)/1000 & "/" & Round($stats[1],-2)/1000 & " Mo occupé"
EndFunc

Func getGc()
    Return RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winsat","PrimaryAdapterString")
EndFunc

Func getHdd()
    If True Then
        Return ""
    Else
        Local $reg_path = "HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi"
        Local  $HDD_label_location = 60, $resultat = ""
        For $scsi_port = 0 to 6
            $reg_path = $reg_path & "\Scsi Port "& $scsi_port
            For $scsi_bus = 0 to 10
                $reg_path = $reg_path & "\Scsi Bus "& $scsi_bus
                For $target_id = 0 to 10
                    $reg_path = $reg_path & "\Target Id "& $target_id
                    For $logical_unit = 0 to 10
                        $reg_path = $reg_path & "\Logical unit Id "& $logical_unit
                        if RegRead($reg_path,"Identifier") <> "" Then
                            $HDD_label_location += 20
                            $lbl_HDD = GUICtrlCreateLabel("HDD : "& RegRead($reg_path,"Identifier"), 30,$HDD_label_location, 200, 20)
                        EndIf
                    Next
                Next
            Next
        Next
        Return $resultat
    EndIf
EndFunc

Func dxdiag()
    MsgBox(0,"","Hola dxdiag !")
    ShellExecuteWait("dxdiag")
EndFunc

Func devmgmt()
    MsgBox(0,"","Hola devmgmt !")
    ShellExecuteWait("devmgmt.msc")
EndFunc
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Répondre