Functions > Keyboard >


HotKeySet

Définit un raccourci clavier qui appelle une fonction utilisateur.

HotKeySet ( "key" [, "function"] )

Paramètre

key La combinaison de touches à utiliser comme raccourci clavier. Même format que Send(). Voir Remarques.
function [optionnel] Le nom de la fonction à appeler lorsque la touche est pressée. Si cette valeur n'est pas spécifiée, le raccourci précédemment créé est effacé.

Valeur de retour

Succès: Retourne 1.
Échec: Retourne 0.

Remarques

Il est recommandé d'utiliser les touches/caractères minuscules (c'est-à-dire "b" et pas "B") lors de la définition des raccourcis clavier pour éviter les erreurs dues à certaines dispositions de clavier dont les touches majuscules et minuscules peuvent être mappés différemment.

Les claviers avec 102 touches, comme le clavier Hungarian, nécessite l'utilisation de "{OEM_102}" pour capturer la touche "í".

Si deux scripts AutoIt utilisent les mêmes raccourcis clavier, vous devriez éviter de faire fonctionner ces scripts simultanément, le second script ne peut pas saisir le raccourci clavier à moins que le premier script termine ou annule l'enregistrement du raccourci avant la définition du raccourci du deuxième script. Si les scripts utilisent des GUI, alors envisagez d'utiliser GUISetAccelerators car ces touches ne sont actives que lorsque la GUI parent est active.

L'appui sur un raccourci clavier interrompt généralement la fonction ou l'instruction en cours dans le script, et exécute la fonction définie jusqu'à ce que celle-ci se termine ou qu'elle soit interrompue. Les exceptions sont les suivantes :
1) Si la fonction en cours est une fonction "bloquante", l'appui sur le raccourci clavier est mis en attente puis traité dès que la fonction bloquante se termine. MsgBox() et FileSelectFolder() sont des exemples de fonctions bloquantes. Essayez le comportement de Shift-Alt-d dans l'exemple.
2) Si vous avez mis le script en pause par un clic sur l'icône AutoIt de la zone de notification, tous les raccourcis clavier utilisés pendant cette pause sont ignorés.

Les combinaisons suivantes ne peuvent pas être définies:

ASC nnnn Ne peut pas être utilisé avec Send(). Elle utiliserait le premier caractère "A" comme Send() fait quand "{...}" est invalide.
Ctrl+Alt+Delete Raccourci réservé par Windows.
F12 Raccourci également réservé par Windows, selon son API.
"Touche Entrée du clavier numérique" A la place, utilisez {Enter} qui capture les deux touches "Entrée" du clavier.
Win+B,D,E,F,L,M,R,U; et Win+Shift+M Ce sont des raccourcis intégrés à Windows. Note: Win+B et Win+L sont probablement réservés sur Windows XP et supérieur.
Alt, Ctrl, Shift, Win Ce sont les touches de modification elles-mêmes!
Autres Tout raccourci clavier global qu'un utilisateur a défini par une application tierce, et toute combinaison de deux "touches de base" ou plus telle que '{F1}{F2}' et n'importe qu'elle touche de la forme '{LALT}' ou '{ALTDOWN}'.

Lorsque vous définissez un raccourci clavier, AutoIt capture les appuis de touche sans les faire passer à l'application active en cours, avec une exception: les touches de verrouillage (NumLock, CapsLock, et ScrollLock) basculeront toujours leur état respectif!
Pour Send() une combinaison de touches déclenchera un événement HotKeySet(), utilisez ControlSend(), ou annulez l'enregistrement de l'événement HotKeySet(), sinon, l'événement Send() provoquera une boucle infinie.

; Capture et envoi d'un appui de touche
HotKeySet("{Esc}", "captureEsc")
Func captureEsc()
    ; ... peut faire des actions ici
    HotKeySet("{Esc}")
    Send("{Esc}")
    HotKeySet("{Esc}", "captureEsc")
EndFunc ;==>captureEsc
La fonction appelée ne peut pas recevoir de paramètres. Ils seront ignorés.

La macro @HotKeyPressed peut être utilisée à l'intérieur de la fonction pour traiter différentes touches dans la même fonction.

En relation

GUISetAccelerators, Send

Exemples

Exemple 1


#include <MsgBoxConstants.au3>

; Appuyez sur Echap pour terminer le script, Pause/Break pour "pause"

Global $g_bPaused = False, $g_bStop = False

HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage")  ; Shift-Alt-d

While Not $g_bStop
    Sleep(100)
WEnd

Func TogglePause()
    $g_bPaused = Not $g_bPaused
    While $g_bPaused
        Sleep(100)
        ToolTip('Script en "Pause"', 0, 0)
    WEnd
    ToolTip("")
EndFunc   ;==>TogglePause

Func Terminate()
    $g_bStop = True
EndFunc   ;==>Terminate

Func ShowMessage()
    MsgBox($MB_SYSTEMMODAL, "", "Ceci est un message.")
EndFunc   ;==>ShowMessage


Exemple 2


#include <MsgBoxConstants.au3>

; Appuyez sur Echap pour terminer le script, Pause/Break pour "pause"

Global $g_bPaused = False, $g_bStop = False

HotKeySet("{PAUSE}", "HotKeyPressed")
HotKeySet("{ESC}", "HotKeyPressed")
HotKeySet("+!d", "HotKeyPressed") ; Shift-Alt-d

While Not $g_bStop
    Sleep(100)
WEnd

Func HotKeyPressed()
    Switch @HotKeyPressed ; Le dernier raccourci utilisé.
        Case "{PAUSE}" ; la chaîne est le raccourci {PAUSE}.
            $g_bPaused = Not $g_bPaused
            While $g_bPaused
                Sleep(100)
                ToolTip('Script en "Pause"', 0, 0)
            WEnd
            ToolTip("")

        Case "{ESC}" ; La chaîne est le raccourci {ESC}.
            $g_bStop = True

        Case "+!d" ; La chaîne est le raccourci Shif-Alt-d.
            MsgBox($MB_SYSTEMMODAL, "", "Ceci est un message.")

    EndSwitch
EndFunc   ;==>HotKeyPressed