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 :
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
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1",300,300,0,0)
Global $Button1 = GUICtrlCreateButton("Button1",0,0,0,0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Local $aAccelKeys[1][2] = [["{F5}",$Button1]]
GUISetAccelerators($aAccelKeys)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
MsgBox(0,"","F5 appui")
EndSwitch
WEnd
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
Code : Tout sélectionner
#include <HotKey.au3> ; http://msdn.microsoft.com/en-us/library/dd375731%28VS.85%29.aspx
#include <vkConstants.au3>
#Include <GUIConstantsEx.au3>
Global $winName = "Mon Prog"
$gui = GUICreate($winName, 669, 480, -1, -1)
GUISetState()
;~ ...
HotKeySet("{F5}", "_refresh")
_HotKeyAssign(BitOR($CK_CONTROL, $VK_S), "_ctrl_s", $gui)
_HotKeyAssign($VK_F1, "_f1", $gui)
_HotKeyAssign($VK_F3, "_f3", $gui)
do
until GUIGetMsg() = $GUI_EVENT_CLOSE
;~ ...
Func _refresh()
HotKeySet('{F5}')
Send('{F5}')
ConsoleWrite('F5 (global)' & @CRLF)
If WinActive($winName) Then
;~ ...
EndIf
HotKeySet("{F5}", "_refresh")
EndFunc ;==>_refresh
Func _ctrl_s()
ConsoleWrite('CTRL + S' & @CRLF)
EndFunc
Func _f1()
ConsoleWrite('F1' & @CRLF)
EndFunc
Func _f3()
ConsoleWrite('F3' & @CRLF)
EndFunc
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.