Page 1 sur 1

[..] Evenement

Posté : sam. 04 juil. 2009 19:41
par jyz93
Bonjour a tous,

Voila j'ai fais un petit scripts qui automatise plusieurs actions sur mon pc et qui tourne en boucle infinie...
Je voudrais donc savoir comment faire pour lors de l'appui de n'importe quel touche sur mon clavier (ou même de la souris) celui s'arrête automatiquement.
J'ai vu la fonction : Hotkeyset
Le problème c'est qui faut faire toutes les touches une par une... :s

Re: [..] Evenement

Posté : sam. 04 juil. 2009 19:59
par orax
Un hook global clavier et souris devrait faire l'affaire.
Cherchez hook keyboard et hook mouse ici ou sur le forum anglais.
Un exemple ici avec F3 : http://www.autoitscript.com/forum/index ... t&p=591697

Re: [..] Evenement

Posté : sam. 04 juil. 2009 20:22
par jumby
On peut couvrir un large choix de touche avec _ispressed sans trop ce prendre la tête.

Code : Tout sélectionner

#include <Misc.au3>

$dll = DllOpen("user32.dll")

While 1
    Sleep ( 50 )
    for $loop = 1 to 92 step 1
    If _IsPressed($loop, $dll) Then
        Exit
        ExitLoop
    EndIf
    Next
WEnd
DllClose($dll)

Re: [..] Evenement

Posté : lun. 06 juil. 2009 19:47
par SagePourpre
_isPressed est cependant lent... Il prend du temps avant de faire effet (approximativement 500 ms)

J'irais peut-être voir du côté du lien d'Orax si j'étais toi.
Le script sur le forum anglais devrait réagir instantanément...

Re: [..] Evenement

Posté : lun. 06 juil. 2009 19:48
par jumby
500ms ? C'est bizarre, c'est instantané pour moi.

Re: [..] Evenement

Posté : lun. 06 juil. 2009 20:21
par SagePourpre
jumby a écrit :500ms ? C'est bizarre, c'est instantané pour moi.
Vraiment ? ...


Voilà ma preuve


Le code ci-dessous est très simple


Appuie sur Home pour faire apparaître un tooltip évolutif.

Pause pour le mettre en pause
End pour l'arrêter


Home et Pause réagisse instantanément. Par contre, is pressed n'est pris en compte que lorsque
la fonction est à cette endroit.


La différence entre les 2 pour moi est flagrante...


Si j'effleure "end", le script, bien souvent, ne réagira pas. (fonctionne avec _ispressed)

Par contre, si j'effleure pause (qui fonctionne avec Hotkeyset)
la variable $Pause sera immédiatement changé et le script arrêtera sans que jamais j'aie
à ré-appuyer sur la touche une seconde fois parce que la première fois n'a pas pris.

Code : Tout sélectionner

#include<misc.au3>
HotKeySet("{HOME}","start")
HotKeySet("{PAUSE}","pause")
Global $pause
While 1 
    Sleep(100)
WEnd



Func start()
    $i = 0
    While Not _IsPressed(23)
        $i+=1
        Sleep(500)
        ToolTip($i,0,0)
        While $pause = 1
            Sleep(100)
        WEnd
        
        
    WEnd
EndFunc

Func pause()
    $pause = Not $pause
EndFunc
 

P.s. Un moyen simple pour contourner ce "délai"



Code : Tout sélectionner

#include<misc.au3>
AdlibEnable("presse",50)

While 1
    Sleep(1000)
WEnd



Func presse()
    If _IsPressed(23) Then
        
        MsgBox(0,"","",1)
    EndIf
EndFunc

Re: [..] Evenement

Posté : ven. 17 juil. 2009 00:23
par Tlem
Regardez l'exemple donné avec la fonction _WinAPI_SetWindowsHookEx.
Je pense qu'il devrait vous convenir.