[R] Communication GUI autoit / script externe

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Avatar du membre
lacnia
Niveau 3
Niveau 3
Messages : 33
Enregistré le : ven. 18 juil. 2014 01:45
Status : Hors ligne

[R] Communication GUI autoit / script externe

#1

Message par lacnia »

Hey ! Bonsoir tout le monde ! ( Bonjour s'il fait jour ! 8) )

Alors je vous explique, je voulais coder, pour apprendre, une GUI qui recevrais des item dans sa ListView selon les connections entrantes/sortantes, qui afficherait par exemple à quelle IP/PORT l'ordinateur est connecté, bref cela n'est pas le problème ...
Le problème vient du fait que cela doit être plus ou moins au feeling, je m'explique :
Dès que l'ordinateur se connecte à une IP, celle ci est ajouter comme item de ListView de la GUI, sans avoir à actualiser ....
Seulement, pour faire sa je suis obligé de faire une boucle infini qui appellerais la fonctions toutes les 200MS, mais comme il est impossible d’exécuter une boucle en fond, cette boucle empêche toute intervention de la part de l'user via la GUI et c'est un peu trop brouillon à mon gout sa xD

Après quelques recherches sur internet, j'ai vite fais adopté l'idée de faire cela en deux script, un script comportant la GUI, et un autre la boucle infini qui me gênait, et le script comportant la boucle infini aurait pour rôle d'envoyer les donné directement dans la GUI, par exemple si elle détecte que l'ordinateur est connecté à l'ip 165.27.***.** , alors elle l'envoi à la GUI ...
Cela me paraît une bonne solution, seulement je ne sais pas du tout, et n'ai pas la moindre idée de comment faire en sorte que les donné reçus par le script de la boucle soit envoyées directement sur la GUI ...

Exemple de la GUI que j'utilise pour mes test ( Exemple pris sur Autoit Help ) :

Code : Tout sélectionner

    GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
    GUISetBkColor(0x00E0FFFF) ; will change background color

    Local $idListview = GUICtrlCreateListView("Hour  |Min|Sec  ", 10, 10, 200, 150) ;,$LVS_SORTDESCENDING)
    Local $idButton = GUICtrlCreateButton("Value?", 75, 170, 70, 20)
    Local $idItem1 = GUICtrlCreateListViewItem(@HOUR & "|" & @MIN & "|" &@SEC, $idListview)

    GUICtrlCreateInput("", 20, 200, 150)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
    GUISetState(@SW_SHOW)


    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop

            Case $idButton

            Case $idListview

        EndSwitch
    WEnd
 
Là par exemple, le script externe aurait pour rôle d'envoyer l’heure actuelle toutes les 1 secondes ...

J'ai tenté quelques recherches par rapport à cette main d’œuvre mais je n'ai pas trouvé quelque chose, d’ailleurs je ne vois pas vraiment quelle mot clé utiliser, si jamais quelqu'un pourrais m'éclairer à ce sujet, sa serait super sympa de sa part !

PS : Toute aide est la bienvenue, même si ce n'est qu'un mot clé, un lien, le nom d'une fonction, sa m'aidera énormément, merci encor :D.
PS2 : Désoler à vos yeux pour les fautes d'orthographes et ce post écris à la vas-vite, il se fait tard et je suis fatigué :? .
Modifié en dernier par lacnia le lun. 21 juil. 2014 00:40, modifié 1 fois.
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [..] Communication GUI autoit / script externe

#2

Message par blacksoul305 »

Bonjour,

j'ai deux idées qui me viennent toute suite en tête. Tu peux :

- créer un fichier temporaire que met à jour le programme qui s'occupe de vérifier qui se connecte où, et le lire avec ton programme qui utilise la GUI.

- utiliser les sémaphores. Je n'y connais pour ainsi dire rien, légèrement le principe, mais je pense que ça serait plus efficaces. Je te laisse regarder ces liens sur le forum qui en ont parlé !

Tutoriel sur la sémaphorisation.

Demande d'aide sur les sémaphores généraux

Bon courage !
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
lacnia
Niveau 3
Niveau 3
Messages : 33
Enregistré le : ven. 18 juil. 2014 01:45
Status : Hors ligne

Re: [..] Communication GUI autoit / script externe

#3

Message par lacnia »

Je te remercie blacksoul305 ! Je voir ce qu'est la sémaphorisation :o Je dirais que c'est compliqué vue le nom mais bon, comme on dit, l'habille ne fait pas le moine x).
Modifié en dernier par mikell le ven. 18 juil. 2014 11:56, modifié 1 fois.
Raison : viré la citation
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Communication GUI autoit / script externe

#4

Message par mikell »

Merci de ne pas citer le message précédent dans ta réponse

Tu as essayé AdlibRegister("ma_fonction", 500) ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
lacnia
Niveau 3
Niveau 3
Messages : 33
Enregistré le : ven. 18 juil. 2014 01:45
Status : Hors ligne

Re: [..] Communication GUI autoit / script externe

#5

Message par lacnia »

Bonsoir, merci d'avoir fait par de cette aide !
Mais un adlibregister fait appelle à beaucoup de ressources du processeurs non ? Sa n'a pas d'impact négatif par rapport au script ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Communication GUI autoit / script externe

#6

Message par mikell »

Pas plus qu'une boucle, c'est une bonne alternative si on veut "libérer" la boucle principale
De toute façon avec 2 scripts, tu devras bien mettre dans une boucle du script1 un check sur ce que retourne le script2, non ?

Edit
Rectification : si tu fais un AdlibRegister("ma_fonction", 500) sur une fonction qui met 1 seconde à s'exécuter, là il risque en effet d'y avoir un souci :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
lacnia
Niveau 3
Niveau 3
Messages : 33
Enregistré le : ven. 18 juil. 2014 01:45
Status : Hors ligne

Re: [..] Communication GUI autoit / script externe

#7

Message par lacnia »

Je pensais à ce que le truc écrivent directement les donné dans la listView de la GUI mais bon sa serait difficile à gérer après, je n'avais pas vraiment use adlib auparavant, mais j'ai fais deux trois test là et je le trouve assez utile finalement, je finis le cour sur la sémaphorisation qui est assez intéressant puis je test le tout, si c'est bon, je mettrais le post en résolu, merci encor :)
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Communication GUI autoit / script externe

#8

Message par orax »

mikell a écrit :Rectification : si tu fais un AdlibRegister("ma_fonction", 500) sur une fonction qui met 1 seconde à s'exécuter, là il risque en effet d'y avoir un souci :mrgreen:
Je ne suis pas sûr de ça, je viens de faire un test en modifiant l'exemple de la doc pour que la fonction enregistrée par AdlibRegister mette du temps à s'exécuter.
Avec AdlibRegister("MyAdLibFunc", 1), la fonction met 1 s ou plus à s'exécuter mais elle ne s'exécute à nouveau que lorsqu'elle est terminée.

Code : Tout sélectionner

MyAdLibFunc called 3 time(s)
937.40995060836
MyAdLibFunc called 4 time(s)
4292.24430791471
MyAdLibFunc called 5 time(s)
933.503493554993
MyAdLibFunc called 6 time(s)
Il y a aussi le mode Opt("GUIOnEventMode", 1) pour que la partie GUI ne soit pas gérée dans la boucle principale.
Modifié en dernier par orax le sam. 19 juil. 2014 00:47, modifié 1 fois.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
lacnia
Niveau 3
Niveau 3
Messages : 33
Enregistré le : ven. 18 juil. 2014 01:45
Status : Hors ligne

Re: [..] Communication GUI autoit / script externe

#9

Message par lacnia »

Je n'avais pas non plus pensé au GUI set event, en le mélangeant avec le adlib sa devrait faire un truc potable xD ....

La fonction devrait durer entre 200 et 500 MS je pense, sinon quelqu'un saurait comment faire pour qu'adlib fasse son appelle de fonction seulement 100 MS après que le call précédent soit terminé ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Communication GUI autoit / script externe

#10

Message par mikell »

Si tu n'appelles pas ça un souci, tu l'appelles comment ? :wink:
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
lacnia
Niveau 3
Niveau 3
Messages : 33
Enregistré le : ven. 18 juil. 2014 01:45
Status : Hors ligne

Re: [..] Communication GUI autoit / script externe

#11

Message par lacnia »

Mikell, le fait d'appeler toutes les 10MS la fonction sleep(250) empêche l'utilisation de la GUI xd
Je n'ai pas très bien compris xD Tu as fais exactement la chose qu'Orax disait qu'il ne fallait pas faire :o
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Communication GUI autoit / script externe

#12

Message par orax »

mikell a écrit :Si tu n'appelles pas ça un souci, tu l'appelles comment ? :wink:
Un souchi ? Image
Je viens seulement de comprendre où tu voulais en venir. :oops: Je pensais que tu voulais dire qu'il pouvait avoir plusieurs exécutions de _fonction() à un instant t à cause de AdlibRegister.

Donc effectivement ça posera un problème. Toutefois, avec Opt("GUIOnEventMode", 1) on peut cliquer sur le bouton sans souci.
► Afficher le texte
lacnia a écrit :sinon quelqu'un saurait comment faire pour qu'adlib fasse son appelle de fonction seulement 100 MS après que le call précédent soit terminé ?
► Afficher le texte
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Communication GUI autoit / script externe

#13

Message par mikell »

Oui, avec OnEvent ou GuiRegisterMsg une fonction peut être lancée en interrompant la fonction en cours d'exécution
lacnia a écrit :... appelle de fonction seulement 100 MS après que le call précédent soit terminé ?
Pour ça plus besoin d'AdlibRegister (ni de boucle d'ailleurs)

Code : Tout sélectionner

_fonction()

While 1
  Sleep(10)
Wend

Func _fonction()
    ; ... code
    Sleep(100)   ; attend 100ms
    Return _fonction()  ; quitte et relance
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre