Page 1 sur 1

[R] Aide pour 'HotKeySet'

Posté : mar. 05 août 2014 18:09
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

Re: [..] Aidepour 'HotKeySet'

Posté : mar. 05 août 2014 18:26
par blacksoul305
Bonjour,

bien du coup il faudrait jeter un coup d’œil du côté de la fonction _IsPressed.

Re: [..] Aidepour 'HotKeySet'

Posté : mar. 05 août 2014 19:45
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

Re: [..] Aidepour 'HotKeySet'

Posté : mar. 05 août 2014 22:42
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()
......
 

Re: [..] Aidepour 'HotKeySet'

Posté : mar. 05 août 2014 22:54
par PandiPanda
quelque chose comme ceci?
► Afficher le texte
le bouton est totalement invisible

Re: [..] Aidepour 'HotKeySet'

Posté : mar. 05 août 2014 23:01
par Faco
Oui je vais resté la dessus, je me demandais si il n'y avait pas un "_GUICTRLNewReservCONTROLID()".

Merci tous.
A+

Re: [..] Aidepour 'HotKeySet'

Posté : mar. 05 août 2014 23:09
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ù.

Re: [R] Aide pour 'HotKeySet'

Posté : mer. 06 août 2014 00:21
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

Re: [R] Aide pour 'HotKeySet'

Posté : mer. 06 août 2014 06:47
par jguinch
@pandipanda : plutôt qu'un bouton de 0 pixel, il serait préférable d'utiliser un contrôle de type Dummy.