[..] Probléme dans l'appel de plusieurs fonctions

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

[..] Probléme dans l'appel de plusieurs fonctions

#1

Message par legend »

Bonjour,
j'ai un petit probléme dans le call de fonctions.
je donne un petit exemple :
je met 2hotkeys, a qui call la fonction "a", b qui call la fonction "b".
"a" et "b" durent 5sec chaqune.
j'apuie sur a, aprés 2sec j'apuie sur b
la fonction a n'est pas achevée, le script pause "a" et fait la fonction "b", aprés il reviens finir la fonction a.
il y a pas un moyen, que quand j'apuie a, aprés 2sec j'apuie b => le script attend que a finis pour commencer b.
merci et bonne journée
Avatar du membre
roselito13
Niveau 4
Niveau 4
Messages : 93
Enregistré le : ven. 07 août 2009 23:39
Localisation : Entre le Pôle Nord et le Pôle Sud
Status : Hors ligne

Re: [..] probléme dans call de plusieurs fonctions

#2

Message par roselito13 »

L'autoit de base ne peut faire que une action a la fois.

Pour executer deux action a la fois renseigne tois sur la fonction "Adlib"
http://www.autoitscript.com/autoit3/doc ... gister.htm

Il existe un UDF dans sur se forum pour exécuter encore plus de chose en même temps.
\ 1337 /
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] probléme dans call de plusieurs fonctions

#3

Message par legend »

Je connais bien pour l'adlib.
c'est pas vraiment ce que je demande.
je demande si je call une fonction "b" lorsque une fonction "a" est en cours (avec hotkey par exemple), "a" s'arrétera, "b" se déclanchera, a la fin de "b", le script finis "a".
je voudrais savoir s'il y a un moyen, pour que quand "a" est en cours, et il y a eu un call de la fonction "b", le script attend que "a" finis pour commencer "b".
je crois pas que c'est trés dur a comprendre sa ^^)
merci et bonne journée
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: [..] probléme dans call de plusieurs fonctions

#4

Message par zeshrek »

ma foi, y a une solution, c'est d'utiliser un flag pour chaque fonction
Je détaille pas trop mais un truc du genre :

Code : Tout sélectionner

[le début de ton script]
$EnCours_A  = false
$EnCours_B  = false

[le corps du script]

func _funcA()
  if $EnCours_B  = true then
    msgbox(1,"Du calme","on attend que B soit fini !!!")
  else
    $EnCours_A  = true
    [ta fonction]
    $EnCours_A  = true
  endif
endfunc

func _funcB()
  if $EnCours_A  = true then
    msgbox(1,"Du calme","on attend que A soit fini !!!")
  else
    $EnCours_B  = true
    [ta fonction]
    $EnCours_B  = true
  endif
endfunc
Ca devrait venir a bout de ton probleme
Si vis pacem para bellum
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] probléme dans call de plusieurs fonctions

#5

Message par legend »

J'ai pensé a sa, mais c'est pas totalement ce que je veux.
je donne un exemple :

Code : Tout sélectionner

opt ("sendkeydelay", 1000)
func a()
send ("aaaa")
endfunc
func b()
send ("bbbb")
endfunc
hotkeyset ("a", "a")
kotkeyset ("b", "b")
while 1
sleep (1000)
wend
chaque fonction mettera 4secondes pour le send (1lettre par secondes)
on dis que j'apuie sur a, et aprés 2secondes j'apuie sur b
quand j'aurais apuié sur b le script aura deja écris 2 "a" seulement.
je veux qu'il : finis les 2 "a" qu'il reste dans la fonction "a".
lancer la fonction b (écrire 4 "b") sans que je re-apuie sur b.
sa veut dire au moment ou j'apuie sur b lorsque que a est en cours, il enregistre l'action et attend jusqu'a ce que "a" s'acheve pour commencer "b".
merci et bonne journée
Avatar du membre
roselito13
Niveau 4
Niveau 4
Messages : 93
Enregistré le : ven. 07 août 2009 23:39
Localisation : Entre le Pôle Nord et le Pôle Sud
Status : Hors ligne

Re: [..] probléme dans call de plusieurs fonctions

#6

Message par roselito13 »

Voila je pense que c'est la Solution que tu chercher.
Je t'ais fait le script complet a partir de se que tu nous as donner :)

Code : Tout sélectionner

opt ("sendkeydelay", 1000)
hotkeyset ("a", "a")
hotkeyset ("b", "b")
$A = False
$B = False

Func a()
    If $B = False
    exec_a()
    Else
    AdlibRegister("a", 100)
    EndIf
EndFunc

Func exec_a()
    $A = True
    Send("aaaa")
    $A = False
    AdlibUnRegister("a")
EndFunc

Func b()
    If $A = False
    exec_b()
    Else
    AdlibRegister("b", 100)
    EndIf
EndFunc

Func exec_b()
    $B = True
    Send("aaaa")
    $B = False
    AdlibUnRegister("b")
EndFunc

While 1
sleep (1000)
Wend
Il existe surement mieux, mais c'est le matin, et puis sa peut te débloque :D
\ 1337 /
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] probléme dans call de plusieurs fonctions

#7

Message par legend »

Euhh, je pense que c'est un code bugué ^^
ce que je veux c'est une commande qui change le systéme de traitement de fonctions par exemple. Sinon c'est peut être possible comme ceci :
► Afficher le texte
Bon voila l'exemple d'un travail manuel beugué :)
sa marche trés mal ^^
quelqu'un a une bonne solution?
merci et bonne journée
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: [..] probléme dans call de plusieurs fonctions

#8

Message par zeshrek »

A ce moment là il te faut une gestion de file d'attente.

Donc en début de script tu crées 2 variables :

Code : Tout sélectionner

$EnCours  = false
$FileDAttente = ""
Puis qqpart dans une section de ton script qui tourne non stop (par ex dans la boucle ou tu attend les retour de ta GUI, ou bien celle ou tu attends que tes users appuient sur le clavier) tu mets le test suivant :

Code : Tout sélectionner

If $EnCours = false and StringLen($FileDattente) > 0 then
  _traitement(StringLeft($FileDattente,1))
endif 
Ensuite il ne te reste qu'a créer 3 fonctions :

Code : Tout sélectionner

func _funcA()
  $FileDAttente = $FileDAttente  & "A"
endfunc

func _funcB()
  $FileDAttente = $FileDAttente  & "B"
endfunc

func _traitement($Touche)
  $EnCours = true
  switch $Touche
    case "A"
      [ton traitement de la touche A]
    case "B"
      [ton traitement de la touche B]
  EndSwitch
  $EnCours = false
  $FileDAttente = FileRight($FileDAttente , StringLen($FileDattente) - 1)
endfunc
Les 2 premières sont appelées par les hotkey. Elles remplissent juste la file d'attente sur pression des touches.
La 3eme traite la file d'attente en mode FIFO, cad elle la vide par la gauche alors qu'elle se remplit par la droite. Donc les traitement se font dans l'ordre ou les touches ont été tapées.
Si vis pacem para bellum
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] probléme dans call de plusieurs fonctions

#9

Message par legend »

c'est presque le même truc que mon code (ajout de cas de plusieurs demande dans la liste d'attente d'une seule fonction)
cependant, il y a pas une opt ou un udf qui fait cela? . . .
parce que ce sera assés lent pour écrire un code pour 30+ de fonctions comme sa et sa posera quelques problémes quand les fonctions ne seront pas, simples (comme a et b) ^^
merci et bonne journée
Avatar du membre
roselito13
Niveau 4
Niveau 4
Messages : 93
Enregistré le : ven. 07 août 2009 23:39
Localisation : Entre le Pôle Nord et le Pôle Sud
Status : Hors ligne

Re: [..] probléme dans call de plusieurs fonctions

#10

Message par roselito13 »

A mas connaissance, il existe pas d'UDF ou de Commande toute prête pour faire cela.
Tu devras donc prendre le temps de la crée, et pourquoi pas la publier :D
\ 1337 /
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] probléme dans call de plusieurs fonctions

#11

Message par legend »

ok, je j'aissaierai de le faire dés que j'aurais du temp.
bonne journée
Répondre