Page 1 sur 1

[R] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : mer. 12 août 2020 09:55
par GMH
Bonjour,

Est-il possible de mettre fin à l'assignation HotKeySet d'une fonction à une touche clavier, autrement que par la sortie du programme ?

Je vous remercie.

Re: [..] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : mer. 12 août 2020 10:19
par jchd
Oui, voir l'aide de ... HotKeySet().

Re: [..] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : mer. 12 août 2020 10:40
par GMH
L'alinéa de l'aide concernant ma question est-il celui-ci ?
2) If you have paused the script by clicking on the AutoIt Tray icon, any hotkeys pressed during this paused state are ignored.
Désigne-t-on par "the AutoIt Tray icon" l'icône figurant un trait affichée à gauche de la croix de fermeture de la fenêtre ?

Si oui, rien n'est désactivé. Lorsque je lance un logiciel quelconque, tel que Notepad par exemple, le clavier ne répond pas tant que mon programme AutoIT n'est pas fermé.

Re: [..] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : mer. 12 août 2020 22:31
par Tlem
Bonsoir.
L'icône en question est celui qui apparaît en bas à droite de votre barre de tâche, à proximité de l'heure.

Concernant votre réponse, voici l'extrait de l'aide qui y répond :

Code : Tout sélectionner

function				[optional] The name of the function to call when the key is pressed. Not specifying this parameter will unset a previous hotkey.
Bonne soirée

Re: [..] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : mer. 12 août 2020 22:43
par TommyDDR
hks.png

Re: [R] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : jeu. 13 août 2020 09:23
par GMH
J'avais testé cette solution mais elle me conduisait à une erreur parce que je l'avais mal comprise. J'ôtais la fonction entre les guillemets au lieu de supprimer l'argument. Je codais HotKeySet("a","") au lieu de coder HotKeySet("a").

Je vous remercie de m'avoir redirigé vers cette solution que j'avais complètement oubliée pour me perdre dans un codage de mon invention qui m'a pris des heures sans résultats probants.

Encore merci.

Re: [R] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : jeu. 13 août 2020 18:08
par jchd
Il vaut mieux passer une fonction plutôt que son nom sous forme chaîne, e.g. :
HotKeySet("a", _MaFonction)
au lieu de
HotKeySet("a", "_MaFonction")

Du coup l'inactivation de ce raccourci devient triviale et sans ambiguité :
HotKeySet("a")

Les fonctions sont des types de première classe depuis un bout de temps déjà.

Re: [R] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : jeu. 13 août 2020 19:45
par GMH
Effectivement, ça fonctionne sans guillemets de part et d'autre du nom de la fonction.
Même chose avec les fonctions appelées par les contrôles. Codage plus rapide ...
Qu'entend-on par "fonction type de première classe" ?

Re: [R] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : jeu. 13 août 2020 20:35
par jchd
Je veux dire que c'est un type à part entière (deux types même) :

Code : Tout sélectionner

Local $f = MsgBox
ConsoleWrite(VarGetType($f) & @LF)

$f = _Fonction
ConsoleWrite(VarGetType($f) & @LF)

$f = "MsgBox"
ConsoleWrite(VarGetType($f) & @LF)	; ne nous apporte rien

Func _Fonction()
EndFunc
Ca évite de passer une chaîne qui contient un nom de fonction erroné et de se prendre un crash le jour où l'appel se fait, ça évite aussi que Au3Stripper ne sache pas de quoi il retourne, etc.

Re: [R] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : jeu. 13 août 2020 22:17
par mikell
jchd a écrit : jeu. 13 août 2020 18:08Il vaut mieux passer une fonction plutôt que son nom sous forme chaîne
Le problème c'est que comme ce n'est pas mentionné dans l'aide, un utilisateur ne va pas prendre le risque de faire une erreur de syntaxe
A moins d'être un scientifique (comme toi) ou un pervers (comme moi, quoique ...) :mrgreen:

Re: [R] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : ven. 14 août 2020 00:02
par jchd
J'ai commis une révision de l'aide sur ce sujet car en effet il y avait pas mal de manques et surtout une classification bor*élique des types.
La version révisée est dans les tuyaux et devrait sortir ... un jour.

La seule mention que j'avais repéré est là dans la version EN :

Function Notes
Functions in AutoIt are first class objects. Among other things, that means you can assign a function to a variable, pass it around as an argument or return from another function.
Aside from certain specific scope-regarding declaration rules (being that the names of the built-in functions are reserved and of UDFs' can be overwritten only locally), the names of functions do not have special status in the language.

#include <MsgBoxConstants.au3>
Local $vFunc = MsgBox
$vFunc($MB_OK, "Hi there!", "Lovely day today.")


et dans le changelog :

3.3.10.0 (23rd December, 2013) (Release)
Added: Functions can now be referenced in variables and the function can be called through the variable.
Added: FuncName().
Added: Built-in functions that take a callback now be passed directly in addition to the old method of passing as a string. Built-in functions can also be passed now (be careful that the function you pass matches what the caller expects).


Donc cette possibilité existe depuis fort longtemps mais n'a jamais été documentée complètement.

Re: [R] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : ven. 14 août 2020 12:47
par mikell
C'est d'un surréalisme macronien
Voilà une propriété qui existe depuis 2013 mais que personne (ou presque) ne connait parce que la seule mention en est un obscur entrefilet caché dans une partie de l'aide que personne (ou presque) ne lit jamais, et dont la seule explication à peu près claire se trouve dans le changelog
Built-in functions can now be passed directly in addition to the old method of passing as a string
:roll:

Re: [R] HotKeySet : Fin de l'assignation d'une fonction à une touche

Posté : ven. 14 août 2020 21:41
par jchd
Eh oui, comme avec les contrats d'assurance ou de crédit, il faut lire tout ce qui est écrit en petits caractères ; ici, le changelog à chaque release.

Je sais bien que le suivi de ce projet est bien trop lâche et mérite une réforme de fond mais je ne suis aucunement en position de faire quoi que ce soit d'efficace à ce niveau.