Page 1 sur 1

[R] Enfoncement et relachement

Posté : mer. 15 avr. 2009 15:03
par Stigmate
Bonjours,
Je souhaiterais qu'une partie de mon script s'exécute lorsque j'enfonce le bouton gauche de ma souris et qu'il s'arrête lorsque je le relâche. Cela est il possible sous Autoit :?:
J'ai bien sur regardé du coté des mousedown/up, mouseclickdowndelay, _ispressed ect...
Peut être qu'il y a une façon particulière de les utiliser pour arriver à se résultat ?
Merci d'avance, Stig.

Re: [..] Enfoncement et relachement

Posté : mer. 15 avr. 2009 21:20
par Tlem
Oui cela est possible, mais avec quelques restrictions.
Comme AutoIt n'est pas vraiment multitache, une fois votre code lancé, celui-ci ne pourra s'arrêter qu'à la fin.

Je vais essayé de m'exprimer un peut mieux.
Si vous faites une fonction de ce genre :

Code : Tout sélectionner

Func _Test1()
   Sleep(5000)
   Sleep(5000)
EndFunc
Une fois ce code lancé, AutoIt va attendre 2 fois 5 secondes quoi qu'il arrive.
Si vous voulez pouvoir arrêter la fonction entre temps, vous pouvez insérer un contrôle entre les deux Sleep pour voir si la touche à été relâchée ...

Après, selon ce que vous devez faire, rien ne vous empêche de créer un second exécutable contenant le code à exécuter que vous lancerez en récupérant son handle, ce qui vous permettra de faire une boucle de contrôle de l'état de la touche sans aucun blocage quelconque et le moment venu, grâce au handle vous arrêtez le processus du second exécutable (ce qui reviendrait à faire du 'vrais multitache')

Re: [..] Enfoncement et relachement

Posté : mer. 15 avr. 2009 22:33
par sylvanie
Bonsoir,
+1 sur la mise en garde de Tlem sur les action monolignes qui peuvent "bloquer" le script sur une duré xe comme les sleep.

Sinon, une façon de faire, sans parler encore de plusieur process se renvoyant des infos (à chaque fois que je la sors celle là, ça fait un peu grand père Simpson), serai de faire un while 1 tout bête, et de lancer parallèlement la fonction principale par un adlibenanble. Seulement on teste toujours entre deux ligne de code si la ouris est préssée :

Code : Tout sélectionner

#Include <Misc.au3>


AdlibEnable("_main",500)

While 1
    Sleep(250)
WEnd

Func _main()
    Local $ind
    If  _IsPressed("01")<>1 Then Return
    For $ind=0 to 30
        If  _IsPressed("01")<>1 Then Return
        Sleep(1000)
        If  _IsPressed("01")<>1 Then Return
        ConsoleWrite($ind&@CRLF)
        If  _IsPressed("01")<>1 Then Return
    Next
    
EndFunc