IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Activer la touche CAPS LOCK du clavier


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut Activer la touche CAPS LOCK du clavier
    Bonjour,

    Je souhaite activer la touche caps lock du clavier en automatique.

    J'ai chercher sur le forum et j'ai trouver ce lien http://vb.developpez.com/faq/?page=S...DesactAcpsLock

    J'ai donc recopier le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Type KeyboardBytes
         kbByte(0 To 255) As Byte
    End Type
    Enum apiOnOff
        apiOn = 1
        apiOff = 0
    End Enum
    Dim kbArray As KeyboardBytes
     
    Private Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
    Private Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
     
    Private Sub ChangerCapsLock(v As apiOnOff)
        GetKeyboardState kbArray
        kbArray.kbByte(&H14) = v
        SetKeyboardState kbArray
    End Sub
    Cependant lors de la compilation plusieurs messages d'erreurs sont affichés:

    Les instructions types ne sont plus pris en charge j'ai donc remplacé type par structure
    A la ligne kbByte(0 To 255) As Byte, une erreur apparaît m'indiquant "Déclaration attendue"
    A la ligne kbArray.kbByte(&H14) = v, une erreur est signalée m'indiquant "KbByte n'est pas un membre de WindowsApplication1.Module1.KeyboardBytes

    Pour ces deux dernières erreur je ne trouve pas de solution

    Merci pour votre aide.

  2. #2
    Candidat au Club
    Homme Profil pro
    Graphiste - Webdesigner
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Graphiste - Webdesigner
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Gildas22 Voir le message
    Bonjour,

    Je souhaite activer la touche caps lock du clavier en automatique.

    J'ai chercher sur le forum et j'ai trouver ce lien http://vb.developpez.com/faq/?page=S...DesactAcpsLock

    J'ai donc recopier le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Type KeyboardBytes
         kbByte(0 To 255) As Byte
    End Type
    Enum apiOnOff
        apiOn = 1
        apiOff = 0
    End Enum
    Dim kbArray As KeyboardBytes
     
    Private Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
    Private Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
     
    Private Sub ChangerCapsLock(v As apiOnOff)
        GetKeyboardState kbArray
        kbArray.kbByte(&H14) = v
        SetKeyboardState kbArray
    End Sub
    Cependant lors de la compilation plusieurs messages d'erreurs sont affichés:

    Les instructions types ne sont plus pris en charge j'ai donc remplacé type par structure
    A la ligne kbByte(0 To 255) As Byte, une erreur apparaît m'indiquant "Déclaration attendue"
    A la ligne kbArray.kbByte(&H14) = v, une erreur est signalée m'indiquant "KbByte n'est pas un membre de WindowsApplication1.Module1.KeyboardBytes

    Pour ces deux dernières erreur je ne trouve pas de solution

    Merci pour votre aide.
    Bonjour ,

    N'oublie pas d'importer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Imports System.Windows.Input
    Imports System.Runtime.InteropServices


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Call keybd_event(System.Windows.Forms.Keys.CapsLock, &H14, 1, 0)
            Call keybd_event(System.Windows.Forms.Keys.CapsLock, &H14, 3, 0)
        End Sub
    En espérant de t'avoir aidé

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par NanowHD Voir le message
    Bonjour ,

    N'oublie pas d'importer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Imports System.Windows.Input
    Imports System.Runtime.InteropServices


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Call keybd_event(System.Windows.Forms.Keys.CapsLock, &H14, 1, 0)
            Call keybd_event(System.Windows.Forms.Keys.CapsLock, &H14, 3, 0)
        End Sub
    En espérant de t'avoir aidé
    Bonsoir NanowHD,

    Merci pour ta réponse,

    Ton code marche partiellement. Si la touche caps lock est verrouillée alors ton code la déverrouille par contre si elle n'est pas verrouillée alors elle la verrouille.

    Donc j'ai ajouté un test de vérification pour savoir si le caps lock est verrouillé avant le lancement de ton code et donc cela fonctionne.

    Ci-dessous le code modifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer) 'Ligne qui sert pour l'activation de la touche majuscule
     
        Private Sub majuscule_verification(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
            If Control.IsKeyLocked(Keys.CapsLock) Then
            Else
                Call keybd_event(System.Windows.Forms.Keys.CapsLock, &H14, 1, 0) 'Sert à activer la touche majuscule
                Call keybd_event(System.Windows.Forms.Keys.CapsLock, &H14, 3, 0) 'sert à activer la touche majuscule
            End If
     
        End Sub
    Le seul problème est que si l'utilisateur saisi une touche et que le clavier n'est pas verrouillé alors le code verrouille bien le caps lock mais la touche saisie par l'utilisateur n'est pas prise en compte et donc celui ci est obligé de la saisir une deuxième fois.

    Il faudrait un code qui mémorise la touche appuyée par l’utilisateur et la retranscrive après le verrouillage du caps lock.

    Nouvelle étape à établir, je n'ai pas encore trouvé la solution pour l'instant.

    Si toi ou quelqu'un d'autre a une idée de code je suis preneur.

    Merci pour ton code qui m'a permis d'avancé

  4. #4
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    761
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 761
    Points : 274
    Points
    274
    Par défaut
    Tu veux vraiment passer en mode CAPS LOCK ou bien passer en majuscule en temps réel le texte saisi par l'utilisateur ?
    Dans le 2ème cas, la solution la plus élégante consiste sans doute à passer utiliser l'event KeyPress (ou KeyDown, je ne sais plus) du champ en question.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par noftal Voir le message
    Tu veux vraiment passer en mode CAPS LOCK ou bien passer en majuscule en temps réel le texte saisi par l'utilisateur ?
    Dans le 2ème cas, la solution la plus élégante consiste sans doute à passer utiliser l'event KeyPress (ou KeyDown, je ne sais plus) du champ en question.
    Bonjour noftal,

    Merci pour ta réponse.

    Je veux passer en majuscule en temps réel le texte saisi par l'utilisateur.

    Mon code est déjà passé sur l'event Keydown du Textbox en question.

    Le seul problème est que si l'utilisateur saisi une touche et que le clavier n'est pas verrouillé alors le code verrouille bien le caps lock mais la touche saisie par l'utilisateur n'est pas prise en compte et donc celui ci est obligé de la saisir une deuxième fois.

    Ce problème est lié à cette instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Char.IsLower(e.KeyChar) = True Then e.Handled = True ' Si minuscule ne saisi pas
    En effet, il ne faut pas que l'utilisateur puisse saisir les caractères avec accent type (é, à, è...) donc cette instruction est obligatoire.

    Donc le problème reste le même il faut un code qui mémorise la touche appuyée par l’utilisateur et la retranscrive après le verrouillage du caps lock.

    Merci quand même.

  6. #6
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    761
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 761
    Points : 274
    Points
    274
    Par défaut
    Tu veux que la touche "é" affiche "2" ?

    Le plus simple n'est-il pas un Select Case ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub TextBox1_keypress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
            Dim c As Char
     
            Select Case e.KeyChar
                Case "&"
                    c = "1"
                Case "é"
                    c = "2"
    ...
                Case Else
                    c = Char.ToUpper(e.KeyChar)
            End Select
            e.KeyChar = c
     
        End Sub
    Au pire tu as une quinzaine de cas à traiter : les touches de 1 à 9 + les touches de ponctuation.
    Il y a peut-être plus concis, mais je pense qu'en terme d'efficacité et de rapidité, tu ne devrais pas être gêné.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par noftal Voir le message
    Tu veux que la touche "é" affiche "2" ?

    Le plus simple n'est-il pas un Select Case ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub TextBox1_keypress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
            Dim c As Char
     
            Select Case e.KeyChar
                Case "&"
                    c = "1"
                Case "é"
                    c = "2"
    ...
                Case Else
                    c = Char.ToUpper(e.KeyChar)
            End Select
            e.KeyChar = c
     
        End Sub
    Au pire tu as une quinzaine de cas à traiter : les touches de 1 à 9 + les touches de ponctuation.
    Il y a peut-être plus concis, mais je pense qu'en terme d'efficacité et de rapidité, tu ne devrais pas être gêné.
    Bonsoir noftal,

    Je me suis peut-être mal exprimé je ne veux pas que la touche "é" affiche 2 mais que la saisie de la touche "é" ne soit pas possible d'où la ligne de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Char.IsLower(e.KeyChar) = True Then e.Handled = True ' Si minuscule ne saisi pas
    Donc la solution des case ne me convient pas.

    Donc le problème reste le même il faut un code qui mémorise la touche appuyée par l’utilisateur et la retranscrive après le verrouillage du caps lock.

    Merci quand même.

  8. #8
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    761
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 761
    Points : 274
    Points
    274
    Par défaut
    Je me suis peut-être mal exprimé je ne veux pas que la touche "é" affiche 2 mais que la saisie de la touche "é" ne soit pas possible
    Effectivement, je n'avais pas compris.
    Dans ce cas, ça me semble encore plus simple (exemple pour les touches 1, 2, 3):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Case "&", "é", """"
    c =nothing

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par noftal Voir le message
    Effectivement, je n'avais pas compris.
    Dans ce cas, ça me semble encore plus simple (exemple pour les touches 1, 2, 3):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Case "&", "é", """"
    c =nothing
    Bonsoir noftal,

    Comme je te l'ai dis dans le précédent post ce qui m'intéresse c'est de pouvoir récupérer la touche qui est appuyée si la touche caps lock n'est pas activée pour qu' après avoir activé cette touche caps lock le programme puisse effectuer la saisie automatique de la touche saisie par l'utilisateur avant l'activation de la touche caps locks et ne pas obliger l'utilisateur à ressaisir cette touche.

    Le code que tu me proposes est déjà géré par la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Char.IsLower(e.KeyChar) = True Then e.Handled = True ' Si minuscule ne saisi pas
    Merci quand même

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Bonjour noftal,

    J'ai utilisé le code que tu m'as conseillé car il n'est pas possible de récupérer le code de la touche saisi par l'utilisateur si la touche caps lock n'est pas verrouillée dans mon cas puisque j'interdis la saisi de minuscule par la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Char.IsLower(e.KeyChar) = True Then e.Handled = True ' Si minuscule ne saisi pas
    Donc le code final est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    If Char.IsNumber(e.KeyChar) = True Then e.Handled = True 'Si nombre ne saisi pas
            If Char.IsPunctuation(e.KeyChar) = True Then e.Handled = True 'Si nombre ne saisi pas
            If Char.IsSeparator(e.KeyChar) = True Then e.Handled = True 'Si caratère de séparation ne saisi pas
            If Char.IsSymbol(e.KeyChar) = True Then e.Handled = True 'Si symbole ne saisi pas
            Dim c As Char
            Select Case e.KeyChar
                Case "é", "è", "à", "ù"
                    c = Nothing
                    e.Handled = True 'supprime le son emit lors de l'appui sur l'une des 4 touches defini
                Case Else
                    c = Char.ToUpper(e.KeyChar)
            End Select
            e.KeyChar = c
    Merci à vous noftal et NanowHD pour vos conseils et en espérant que ce post puisse en aider d'autres

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une Solution pour désactiver la touche Caps Lock
    Par Graffito dans le forum Windows
    Réponses: 7
    Dernier message: 15/05/2017, 21h53
  2. Comment activer la touche Num Lock?
    Par frank2243 dans le forum Visual C++
    Réponses: 9
    Dernier message: 27/02/2009, 16h26
  3. Réponses: 8
    Dernier message: 01/10/2007, 16h19
  4. Activation des touches multimédia d'un clavier
    Par Aelin dans le forum Matériel
    Réponses: 2
    Dernier message: 22/09/2007, 18h04
  5. Activer la touche Caps Lock
    Par jagoulard dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 13/01/2005, 21h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo