[R] Lancer une fonction quand une touche est pressé

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
julie
Niveau 5
Niveau 5
Messages : 128
Enregistré le : sam. 28 janv. 2012 17:28
Status : Hors ligne

[R] Lancer une fonction quand une touche est pressé

#1

Message par julie »

bonjour donc voila je cherche a lancer une fonction en appuyant sur la touche f10 donc
j'ai fais avec le code si dessous mais pourquoi a ne marche pas ?

Code : Tout sélectionner

While 1
    Sleep ( 250 )

    If _IsPressed("79") Then
        testoption()
       
WEnd
 
biensur j'ai bien une fonction testoption qui existe ;)

merci
Modifié en dernier par julie le jeu. 02 févr. 2012 12:01, modifié 1 fois.
Avatar du membre
silvere
Niveau 8
Niveau 8
Messages : 532
Enregistré le : sam. 24 sept. 2011 22:56
Status : Hors ligne

Re: [..] lancer une fonction quand une touche est pressé

#2

Message par silvere »

t'a oublier un endif et il vaut mieu utiliser la fonction HotKeySet
Quand le mensonge prend l'ascenseur, la vérité prend l'escalier. Elle met plus de temps, mais elle fini toujours par arriver.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] lancer une fonction quand une touche est pressé

#3

Message par TommyDDR »

silvere a écrit :t'a oublier un endif et il vaut mieu utiliser la fonction HotKeySet
/!\ Je vous rappel que HotKeySet "Bloque" la touche pour tous les autres programmes /!\
Elle ne sera disponible nul part ailleurs, par exemple un HotKeySet de la touche "a" ne permettra plus d'écrire a dans un bloc note.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Lancer une fonction quand une touche est pressé

#4

Message par PandiPanda »

/!\ Je vous rappel que HotKeySet "Bloque" la touche pour tous les autres programmes /!\
Elle ne sera disponible nul part ailleurs, par exemple un HotKeySet de la touche "a" ne permettra plus d'écrire a dans un bloc note.
à moin de ruser, mais ca devien lourd ^^

ceci par exemple;
► Afficher le texte
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
xavierha
Niveau 3
Niveau 3
Messages : 31
Enregistré le : mer. 21 sept. 2011 23:08
Localisation : Atlanta, GA
Status : Hors ligne

Re: [..] Lancer une fonction quand une touche est pressé

#5

Message par xavierha »

il y a un moyen d'eviter ce probleme, si le script a une fenetre (GUI). On peut se servir de HotKeySet, verifier si la fenetre du script est active, et si elle ne l'est pas, on peut desactiver temporairement la hotkey, remplacer le signal perdu qui a declenche la hotkey, et retablir la hotkey.
example:

Code : Tout sélectionner

HotKeySet ( "{F5}", "RunQryBtnOnClick" )

Func RunQryBtnOnClick ()
    if Not WinActive ( "MyScriptWindow" ) Then
        HotKeySet ( "{F5}" ); desactive la hotkey temporairement
        Send("{F5}"); remplacer la touche perdue en l'envoyant a l'application qui a le focus
        HotKeySet ( "{F5}", "RunQryBtnOnClick" ) reactiver la hotkey
        Return
    EndIf
    ; faire des choses utiles ici, qui ne seront faites que si le script a le focus
EndFunc
 
Et si le script n'a pas de fenetre, on peut desactiver la hotkey, remplacer la touche perdue et reactiver la hotkey. Le desavantage est que si la hotkey etait supposee declencher une fonction dans le script seulement, il ne faut pas que le focus soit sur un programme qui pourrait interpreter la hotkey comme une commande de commencer une autre action, bien sur.

exemple:

Code : Tout sélectionner

HotKeySet ( "{F5}", "DemarreMonSysteme" )

Func DemarreMonSysteme()
     HotKeySet ( "{F5}" ); desactive la hotkey temporairement
     Send("{F5}"); remplacer la touche perdue en l'envoyant a l'application qui a le focus
     HotKeySet ( "{F5}", "RunQryBtnOnClick" ) reactiver la hotkey
    ; faire des choses utiles ici, qui ne seront faites que si le script a le focus
EndFunc
 
Avatar du membre
TT22
Membre émérite
Membre émérite
Messages : 1566
Enregistré le : lun. 18 avr. 2011 15:21
Localisation : La Quatrième Dimension
Status : Hors ligne

Re: [..] Lancer une fonction quand une touche est pressé

#6

Message par TT22 »

julie a écrit :j'ai fais avec le code si dessous mais pourquoi a ne marche pas ?

Code : Tout sélectionner

While 1
    Sleep ( 250 )

    If _IsPressed("79") Then
        testoption()
       
WEnd
 
Et bien, pour répondre à ta question : Comme l'as dit Silvere, tu as oublié le Endif et surtout ton Sleep( 250 ) met le script en pause pendant 0.25 secondes puis vérifie si la touche F10 est pressé. Mais il faut que l'utilisateur appuie exactement à ce moment (ce qui ne sera sûrement pas le cas (sauf si il est très chanceux :lol: )).
Une autre erreur possible, il faut que tu inclus Misc.au3

Voici ton code en version fonctionnelle :
► Afficher le texte
Et le script suivant feras exactement la même chose :
► Afficher le texte
En sachant que le deuxième script (donc le HotKeySet) utilisera moins de mémoire.
Cordialement,
TT22
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Lancer une fonction quand une touche est pressé

#7

Message par mikell »

TT22 a écrit :...et surtout ton Sleep( 250 )
Diable :shock:

Il faut absolument signaler ça aux auteurs du fichier d'aide qui ont malencontreusement laissé un Sleep(250) dans l'exemple pour la fonction _IsPressed :P
" 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
julie
Niveau 5
Niveau 5
Messages : 128
Enregistré le : sam. 28 janv. 2012 17:28
Status : Hors ligne

Re: [..] Lancer une fonction quand une touche est pressé

#8

Message par julie »

merci je navait pas vu toute vos reponse je passe en resolu merci encore
Répondre