VB.NET: Bloquer temporairement certaines touches du clavier
Résolu/Fermé
Anonyme209
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
-
4 déc. 2014 à 17:04
Anonyme209 Messages postés 679 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 - 25 juil. 2015 à 23:05
Anonyme209 Messages postés 679 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 - 25 juil. 2015 à 23:05
A voir également:
- VB.NET: Bloquer temporairement certaines touches du clavier
- Certaines touches de mon clavier ne fonctionnent plus ✓ - Forum Clavier
- Clavier bloqué ✓ - Forum Clavier
- Changer clavier qwerty en azerty - Guide
- Clavier+ - Télécharger - Personnalisation
- Mon clavier n'écrit plus ✓ - Forum Clavier
9 réponses
Whismeril
Messages postés
18279
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 mars 2023
888
4 déc. 2014 à 17:34
4 déc. 2014 à 17:34
Bonjour, en .Net tu peux intercepter les messages du clavier et les réaffecter comme tu en as besoin.
J'ai fait ça en c#, il y a un moment déjà.
Voir ici https://codes-sources.commentcamarche.net/forum/oldest/1526742-keydown-keypress#5#dernier.
Avec un traducteur tu pourras avoir le code VB.NET, il y a en de bons sur le net.
J'ai fait ça en c#, il y a un moment déjà.
Voir ici https://codes-sources.commentcamarche.net/forum/oldest/1526742-keydown-keypress#5#dernier.
Avec un traducteur tu pourras avoir le code VB.NET, il y a en de bons sur le net.
Anonyme209
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
19
4 déc. 2014 à 18:15
4 déc. 2014 à 18:15
Bonjour,
converti ça donne ça:
Mais j'aimerais savoir comment l'utiliser. Par exemple, quand et surtout comment appeler la fonction.
converti ça donne ça:
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
'Si VERR.MAJ alors les touches au dessus de AZERTY seront des chiffres, on laisse faire
If Console.CapsLock Then
Return MyBase.ProcessCmdKey(msg, keyData)
End If
Select Case (keyData)
Case Keys.D0, Keys.D1, Keys.D2, Keys.D3, Keys.D4, Keys.D5, Keys.D6, Keys.D7, Keys.D8, Keys.D9
'c'est l? qu'on transforme en chiffre
'msg.WParam correspond au KeyCode de la touche, il suffit d'applique "une translation"
'+= ne focntionne pas donc je le fais en 2 lignes
Dim MonChiffre As Integer = (CType(msg.WParam, Integer) + 48)
msg.WParam = CType(MonChiffre, IntPtr)
Return MyBase.ProcessCmdKey(msg, keyData)
Case Else
Return MyBase.ProcessCmdKey(msg, keyData)
End Select
End Function
Mais j'aimerais savoir comment l'utiliser. Par exemple, quand et surtout comment appeler la fonction.
Whismeril
Messages postés
18279
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 mars 2023
888
4 déc. 2014 à 18:56
4 déc. 2014 à 18:56
Tu dérives le contrôle sur lequel tu tapes (par défaut ta form) et tu mets ce code dans la classe dérivée.
Anonyme209
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
19
5 déc. 2014 à 16:58
5 déc. 2014 à 16:58
Bonjour,
Avec un break-point, je vois que ça ne fonctionne que pour les touches Windows et Tab, Entrée et Echap, les autres touches (Ctrl, Alt, tous les F numéro) ne sont pas détectées par le programme.
De plus, j'aimerais connaître le code pour "annuler" l'action de ces touches, et pour qu'aucune action ne soit effectuée.
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
Select Case (keyData)
Case Keys.ControlKey, Keys.Alt, Keys.LWin, Keys.RWin, Keys.Tab, Keys.Escape, Keys.Enter, Keys.F1, Keys.F2, Keys.F3, Keys.F4, Keys.F5, Keys.F6, Keys.F7, Keys.F8, Keys.F9, Keys.F10, Keys.F11, Keys.F12, Keys.F13, Keys.F14, Keys.F15, Keys.F16, Keys.F17, Keys.F18, Keys.F19, Keys.F20, Keys.F21, Keys.F22, Keys.F23, Keys.F24
'c'est l? qu'on transforme en chiffre
'msg.WParam correspond au KeyCode de la touche, il suffit d'applique "une translation"
'+= ne focntionne pas donc je le fais en 2 lignes
Dim MonChiffre As Integer = (CType(msg.WParam, Integer) + 48)
msg.WParam = CType(MonChiffre, IntPtr)
Return MyBase.ProcessCmdKey(msg, keyData)
Case Else
Return MyBase.ProcessCmdKey(msg, keyData)
End Select
End Function
Avec un break-point, je vois que ça ne fonctionne que pour les touches Windows et Tab, Entrée et Echap, les autres touches (Ctrl, Alt, tous les F numéro) ne sont pas détectées par le programme.
De plus, j'aimerais connaître le code pour "annuler" l'action de ces touches, et pour qu'aucune action ne soit effectuée.
Whismeril
Messages postés
18279
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 mars 2023
888
5 déc. 2014 à 18:40
5 déc. 2014 à 18:40
Pour les touches à annuler
Pour celles qui ne marche pas, je ne sais pas. Je jette un oeil
Return False
Pour celles qui ne marche pas, je ne sais pas. Je jette un oeil
Whismeril
Messages postés
18279
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 mars 2023
888
>
Whismeril
Messages postés
18279
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 mars 2023
5 déc. 2014 à 18:58
5 déc. 2014 à 18:58
En fait
Return True
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Whismeril
Messages postés
18279
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 mars 2023
888
5 déc. 2014 à 19:20
5 déc. 2014 à 19:20
J'ai dérivé un TextBox (plus facile qu'une Form pour voir ce que l'on tape...)
Ceci fonctionne chez moi.
J'utilise HasFlag parce qu'avec le point d'arrêt on voir pour Alt que keyData vaut
Par contre F5 passe (je ne peux pas tester les autres sur mon clavier)
Public Class TextBoxSaisieControle
Inherits TextBox
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
If keyData.HasFlag(Keys.Control) OrElse keyData.HasFlag(Keys.Alt) Then
Return True
End If
Select Case keyData
Case Keys.F5
Return True
Case Else
Return MyBase.ProcessCmdKey(msg, keyData)
End Select
End Function
End Class
Ceci fonctionne chez moi.
J'utilise HasFlag parce qu'avec le point d'arrêt on voir pour Alt que keyData vaut
Keys.RButton Or Keys.ShiftKey Or Keys.Alt, même idée pour Contrôle.
Par contre F5 passe (je ne peux pas tester les autres sur mon clavier)
Anonyme209
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
19
13 déc. 2014 à 12:51
13 déc. 2014 à 12:51
If keyData.HasFlag(Keys.Control) OrElse keyData.HasFlag(Keys.Alt) Then
Return True
End If
Select Case keyData
Case Keys.F1
Return True
Case Keys.F2
Return True
Case Keys.F3
Return True
Case Keys.F4
Return True
Case Keys.F5
Return True
Case Keys.F6
Return True
Case Keys.F7
Return True
Case Keys.F8
Return True
Case Keys.F9
Return True
Case Keys.F10
Return True
Case Keys.F11
Return True
Case Keys.F12
Return True
Case Keys.F13
Return True
Case Keys.F14
Return True
Case Keys.F15
Return True
Case Keys.LWin
Return True
Case Keys.RWin
Return True
Case Else
Return MyBase.ProcessCmdKey(msg, keyData)
End Select
Ca bloque les touches Ctrl et Alt, mais pas les touches Windows et Fx
Whismeril
Messages postés
18279
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 mars 2023
888
13 déc. 2014 à 13:30
13 déc. 2014 à 13:30
Bonjour, je ne peux pas essayer (j'ai un Mac donc pas de touche Windows...)
Si par Fx tu entends F1, F2, F3 etc... de même sur mon clavier Mac y'a que F5 et F6 qui passent chez moi, et chez moi ce code les bloque.
Donc pour la touche Windows as tu essayé de regarder la valeur de keyData avec un point d'arrêt? Si oui qu'est ce que ça vaut? Sinon qu'attends tu?
Si par Fx tu entends F1, F2, F3 etc... de même sur mon clavier Mac y'a que F5 et F6 qui passent chez moi, et chez moi ce code les bloque.
Donc pour la touche Windows as tu essayé de regarder la valeur de keyData avec un point d'arrêt? Si oui qu'est ce que ça vaut? Sinon qu'attends tu?
Anonyme209
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
19
13 déc. 2014 à 14:13
13 déc. 2014 à 14:13
Keys.LWin LWin {91} System.Windows.Forms.Keys
Whismeril
Messages postés
18279
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 mars 2023
888
14 déc. 2014 à 00:21
14 déc. 2014 à 00:21
OK as tu essayé de faire le test avec HasFlag?
Anonyme209
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
19
25 juil. 2015 à 19:06
25 juil. 2015 à 19:06
Bonjour,
Excusez-moi de ne pas avoir répondu plus tôt.
Avec HasFlag, la valeur de Keys.LWin est toujours 91.
De plus avec un breakpoint je peux voir que Return True est bien exécuté, mais cela n'empêche pas le menu démarrer de s'afficher.
Excusez-moi de ne pas avoir répondu plus tôt.
Avec HasFlag, la valeur de Keys.LWin est toujours 91.
De plus avec un breakpoint je peux voir que Return True est bien exécuté, mais cela n'empêche pas le menu démarrer de s'afficher.
Anonyme209
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
19
Modifié par Anonyme209 le 25/07/2015 à 23:11
Modifié par Anonyme209 le 25/07/2015 à 23:11
Bonjour,
Mon problème est résolu. En faisant des recherches un peu plus poussées (et surtout en anglais), j'ai trouvé ceci: https://www.daniweb.com/programming/software-development/threads/359374/disable-alt-tab-win-key-ctrl-esc-key
Il faut désactiver le processus d'hébergement Visual Studio pour le déboguage, mais les touches sont bien rendues non fonctionnelles.
Par contre, comme je m'y attendais, je n'ai pas réussi à bloquer Ctrl + Alt + Suppr, mais ce n'est pas vraiment un problème, je n'ai qu'à tuer automatiquement les processus taskmgr et taskkill avant que ce ne soit eux qui tuent le processus de mon application.
Merci de votre aide.
Mon problème est résolu. En faisant des recherches un peu plus poussées (et surtout en anglais), j'ai trouvé ceci: https://www.daniweb.com/programming/software-development/threads/359374/disable-alt-tab-win-key-ctrl-esc-key
Il faut désactiver le processus d'hébergement Visual Studio pour le déboguage, mais les touches sont bien rendues non fonctionnelles.
Par contre, comme je m'y attendais, je n'ai pas réussi à bloquer Ctrl + Alt + Suppr, mais ce n'est pas vraiment un problème, je n'ai qu'à tuer automatiquement les processus taskmgr et taskkill avant que ce ne soit eux qui tuent le processus de mon application.
Merci de votre aide.