[R] Aide pour 'HotKeySet'

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Faco
Niveau 4
Niveau 4
Messages : 80
Enregistré le : lun. 29 juil. 2013 18:09
Status : Hors ligne

[R] Aide pour 'HotKeySet'

#1

Message par Faco »

Bonjour tout le monde,

dans un de mes scripts j'utilise HotKeySet pour mettre à jour l'interface :

Code : Tout sélectionner

HotKeySet("{F5}", "_refresh")
 
comme ça, que je sois sur l'appli ou pas, dès que je fais 'F5' ça lance 'refresh', du coup j'ai fais ça :

Code : Tout sélectionner

Global $winName = "Mon Prog"
GUICreate($winName, 669, 480, -1, -1)
...
HotKeySet("{F5}", "_refresh")
...
Func _refresh()
    If WinActive($winName) Then
        ...
    EndIf
EndFunc   ;==>_refresh
 
donc là ça 'refresh' que quand je suis sur l'appli. Mon soucis c'est que 'F5' n'est plus capté par d'autres appli ouvertes en même temps.

Une petite aide please, je pence que ça dois pas être trop dur.

Merci
Modifié en dernier par Faco le mar. 05 août 2014 23:02, 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: [..] Aidepour 'HotKeySet'

#2

Message par blacksoul305 »

Bonjour,

bien du coup il faudrait jeter un coup d’œil du côté de la fonction _IsPressed.
Étudiant en 2ème année de Licence Informatique.
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: [..] Aidepour 'HotKeySet'

#3

Message par PandiPanda »

Bonsoir,
Le problème du hotkeyset c'est qu'il va capter tout vos appui de touche de f5 peu importe que vous soyez occupe sur votre programme ou non.
Si vous voulez que votre programme capte l'appui sur la touche f5 a partir du moment ou votre programme est actif, il faudrait dans ce cas utilisé GUISetAccelerators
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Faco
Niveau 4
Niveau 4
Messages : 80
Enregistré le : lun. 29 juil. 2013 18:09
Status : Hors ligne

Re: [..] Aidepour 'HotKeySet'

#4

Message par Faco »

Nickel,
_ispressed pourrais marcher mais je vais partir sur GUISetAccelerators.

Du coup j'ai une autre petite question, dans le tableau que je dois donner à GUISetAccelerators, je dois mettre un Control ID.
Il y a un moyen dans créer un sans créer un Control, comme une réserveation :

Code : Tout sélectionner

;Local $refreshID = 99999999                                          -marche pas
;Local $refreshID = "_refresh"                                        -marche pas
Local $refreshID = GUICtrlCreateButton("", 80, 50, 50, 20)            ;-marche 
GUICtrlSetState($refreshID , $GUI_HIDE)
Local $escID = GUICtrlCreateButton("", 80, 50, 50, 20)
GUICtrlSetState($escID , $GUI_HIDE)
Local $AccelKeys[2][2] = [["{F5}", $refreshID],["{ESC}", $escID]]
GUISetAccelerators($AccelKeys)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $escID
            Exit
        Case $refreshID
            _refresh()
......
 
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: [..] Aidepour 'HotKeySet'

#5

Message par PandiPanda »

quelque chose comme ceci?
► Afficher le texte
le bouton est totalement invisible
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Faco
Niveau 4
Niveau 4
Messages : 80
Enregistré le : lun. 29 juil. 2013 18:09
Status : Hors ligne

Re: [..] Aidepour 'HotKeySet'

#6

Message par Faco »

Oui je vais resté la dessus, je me demandais si il n'y avait pas un "_GUICTRLNewReservCONTROLID()".

Merci tous.
A+
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: [..] Aidepour 'HotKeySet'

#7

Message par blacksoul305 »

Bonsoir,

je n'ai jamais utilisé GUISetAccelerators donc je peux dire des bêtises. Ce que je constate c'est que GUISetAccelerators semble simuler l'appuie d'un control de ta GUI et donc indirectement, déclencher l'événement escompté. En ce sens il me paraît pas possible d'utiliser cette fonction sans controls.

Maintenant, j'aimerais insister sur un point ambiguë, en effet :
Faco a écrit :comme ça, que je sois sur l'appli ou pas
et
PandiPanda a écrit :Si vous voulez que votre programme capte l'appui sur la touche f5 a partir du moment ou votre programme est actif
Je résumerai les choses ainsi :
  • Associer une touche à un contrôle (et donc indirectement à une fonction) si la fenêtre a le focus : GUISetAccelerators.
  • Associer une touche à une fonction, sans conditions au risque de bloquer certains raccourcis au niveau de différentes applications : HotKeySet
  • Associer une touche à une fonction, sans condition : _IsPressed
Cela dit, _IsPressed est assez malléable. Si _IsPressed() en l'état peut intercepter la touche en ayant la fenêtre en focus ou pas, on peut aussi placer des conditions, exemple :

Code : Tout sélectionner

If _IsPressed("1B") And WinActive("nom_de_ta_fenêtre") <> 0 Then...
Bon courage !

EDIT : même si le sujet est résolu, je laisse le message au cas où.
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [R] Aide pour 'HotKeySet'

#8

Message par orax »

J'avais déjà eu le même problème et j'avais utilisé l'UDF _HotKeyAssign http://www.autoitscript.com/forum/topic ... otkey-udf/ (voir code plus bas). Même si le sujet est résolu ça fait une solution supplémentaire si une autre personne passe par là.

J'ai fait des essais avec _IsPressed() mais lorsque l'appui sur la touche était très bref alors la touche n'était pas détectée (à moins d'avoir une boucle assez rapide).

Quant au problème avec HotKeySet(). Il peut se contourner avec un Send(). Ce n'est pas génial mais ça semble marcher.
► Afficher le textedécouvrir ce qui se cache là dessous
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [R] Aide pour 'HotKeySet'

#9

Message par jguinch »

@pandipanda : plutôt qu'un bouton de 0 pixel, il serait préférable d'utiliser un contrôle de type Dummy.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Répondre