Comment puis-je attribuer des raccourcis clavier choisis par l'utilisateur pendant que l'application est en cours d'exécution
Question
J'ai une application qui utilise des raccourcis clavier qui doivent être définis par l'utilisateur.Il s'agit d'une combinaison de 2 touches, soit CTRL, ALT, SHIFT comme une touche de raccourci et les touches de fonction F* comme l'autre (par ex.CTRL + F1, ALT + F2 ou SHIFT + F8) Comme indiqué, ceux-ci sont ensuite choisis par l'utilisateur avant qu'un keyhook global ne soit mis en place pour les écouter et déclencher un événement.Dans mon application, j'ai toutes mes touches de fonction comme suit :
Public Const VK_F1 = &H70
Public Const VK_F2 = &H71
Public Const VK_F3 = &H72
Public Const VK_F4 = &H73
etc...
Voici le code que j'utilise pour attraper les combinaisons de touches :
If (Hookstruct.vkCode = VK_F5) And _
CBool(Hookstruct.flags And _
LLKHF_ALTDOWN) Then
'TriggerEventHere
'Return True
End If
J'ai également deux zones de liste déroulante permettant à l'utilisateur de sélectionner ALT, CTRL, MAJ dans une zone de liste déroulante et les touches de fonction dans l'autre.J'ai alors un bouton qui active le crochet.
Ma question est la suivante :comment puis-je utiliser les informations utilisateur des listes déroulantes pour définir les combinaisons de touches pertinentes dans mon code lorsque l'application est en cours d'exécution ?
Merci d'avoir pris le temps de lire ceci.
La solution
comment puis-je utiliser les informations utilisateur des listes déroulantes pour définir les combinaisons de touches pertinentes dans mon code lorsque l'application est en cours d'exécution ?
Définir le formulaire
KeyPreview
propriété àtrue
(cela capturera toutes les touches au niveau du formulaire).Par exemple.:KeyPreview = true
Dans le
Form1_KeyDown
événement, vous pouvez rechercher les combinaisons de touches définies par l'utilisateur, c'est-à-direceux-ci pourraient être stockés dans unList(Of KeyPresses)
oùKeyPresses
est une classe (astuce :Utilisez leKeyEventArgs
classe comme source d'inspiration) qui contient les combinaisons de touches définies par l'utilisateur.Au moment de l'exécution, une fois que les utilisateurs ont enregistré les combinaisons de touches, lorsqu'ils appuient sur des touches, le message se déclenche.
KeyDown
événement, et vous vérifierez leList(Of KeyPresses)
et déclencher un événement :Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) _ Handles MyBase.KeyDown ' Test for the Alt key If e.Alt = KeyPressesList(0).Alt Then MessageBox.Show("Alt was pressed") End If End Sub