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

VBA Word Discussion :

Contrôler la touche Num Lock en VBA


Sujet :

VBA Word

  1. #1
    Membre du Club

    Homme Profil pro
    Retraité
    Inscrit en
    Août 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2005
    Messages : 26
    Points : 47
    Points
    47
    Par défaut Contrôler la touche Num Lock en VBA
    Bonjour.
    Je cherche, depuis une macro Word en VBA, à pouvoir tester l’état de la touche Verr Num (Num Lock) et éventuellement la modifier.
    J’ai essayé plusieurs solutions :
    • Pour connaître son état :
    Cela semble fonctionner, encore que de façon étrange, puisque j’obtiens True quand la touche est désactivée, et False quand activée !
    • Pour l’activer :
    Je mets au début du module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Function GetKeyState Lib "user32" (ByVal iVirtualKey As Integer) As Long
    Puis dans la macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If GetKeyState(vbKeyNumlock) = 0 Then
         SendKeys "{NUMLOCK}"
    End If
    GetKeyState(vbKeyNumlock) renvoie plus logiquement « 0 » quand Numéro Lock est désactivé, « 1 » quand il est activé.
    • Pour la désactiver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not (Application.NumLock) Then ' Si activé.
         SendKeys "{NUMLOCK}"
    End If
    Le problème est que, dans ces deux derniers cas, le résultat est aléatoire. Ça peut marcher un moment, puis cela ne répond plus, la touche n’est pas modifiée.
    Quelqu’un aurait-il une solution stable ?
    Je suis sur Windows 7, Word 2010.
    Merci d’avance.
    Pjouv

  2. #2
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Une probable solution ici
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  3. #3
    Membre du Club

    Homme Profil pro
    Retraité
    Inscrit en
    Août 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2005
    Messages : 26
    Points : 47
    Points
    47
    Par défaut
    Bonjour !
    Désolé pour la – très – tardive réponse !… Mais je pensais recevoir un message en cas de réponse à ma question – j’ai dû faire une fausse manipulation.
    Merci beaucoup en tout cas, parmi les solutions que présentait votre lien, j’ai retenu celle-ci qui marche très bien.
    Je la recopie à toutes fins utiles.
    Merci encore.

    Mettre dans un module 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    Option Explicit
    ' Code trouvé sur :
    ' https://stackoverflow.com/questions/38018232/send-keys-is-disabling-numlock
     
    ' API declarations
    #If VBA7 And Win64 Then
        Private Declare PtrSafe Sub keybd_event Lib "USER32" ( _
                                    ByVal bVk As Byte, _
                                    ByVal bScan As Byte, _
                                    ByVal dwflags As Long, _
                                    ByVal dwExtraInfo As Long)
        Private Declare PtrSafe Function GetKeyState Lib "USER32" (ByVal nVKey As Long) As Integer
    #Else
        Private Declare Sub keybd_event Lib "USER32" ( _
                                    ByVal bVk As Byte, _
                                    ByVal bScan As Byte, _
                                    ByVal dwflags As Long, _
                                    ByVal dwExtraInfo As Long)
        Private Declare Function GetKeyState Lib "USER32" (ByVal nVKey As Long) As Integer
    #End If
     
    'Constant declarations
    Private Const VK_NUMLOCK = &H90
    Private Const KEYEVENTF_EXTENDEDKEY = &H1
    Private Const KEYEVENTF_KEYUP = &H2
     
    '===================================================================
    'PROPERTIES
    '
     
    '=========================================
    'Returns the current Numlock state
    Public Property Get Numlock() As Boolean
        Numlock = Numlock_State
    End Property
     
    '=========================================
    'Sets the Numlock state
    '   true = turn numlock on
    '   false = turn numlock off
    Public Property Let Numlock(State As Boolean)
        If State <> Numlock_State Then Numlock_Toggle
    End Property
     
    '===================================================================
    'METHODS
    '
     
    '=========================================
    'Returns the current Numlock state
    Private Function Numlock_State() As Boolean
        DoEvents    'Required for key messages to be processed
        Numlock_State = CBool(GetKeyState(VK_NUMLOCK))
    End Function
     
    '=========================================
    'Sets the Numlock state
    '
    '   State:  true = turn numlock on
    '           false = turn numlock off
    Private Sub Numlock_Set(State As Boolean)
        If State <> Numlock_State Then Numlock_Toggle
    End Sub
     
    '=========================================
    'Toggles the Numlock state
    Public Sub Numlock_Toggle()
        Dim previous_state As Boolean
        previous_state = Numlock_State
     
        keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY, 0  'Simulate Numlock key Press
        keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0        'Simulate Numlock key Release
     
    End Sub
    Exemples d’utilisation donnés par l’auteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub Example()
        'Turn Numlock on:
        Numlock = True
     
        'Turn Numlock off:
        Numlock = False
     
        'Check Numlock state:
        Dim IsOn As Boolean
        IsOn = Numlock
     
        'Toggle Numlock state:
        Numlock_Toggle
    End Sub

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

Discussions similaires

  1. [WD18] Windev : Touche Num Lock active ou inactive
    Par cochois dans le forum WinDev
    Réponses: 1
    Dernier message: 20/07/2015, 21h23
  2. Comment activer la touche Num Lock?
    Par frank2243 dans le forum Visual C++
    Réponses: 9
    Dernier message: 27/02/2009, 15h26
  3. Réponses: 20
    Dernier message: 27/11/2007, 14h40
  4. Num Lock / Caps Lock
    Par barbu0055 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 05/07/2005, 17h17
  5. Activer la touche Caps Lock
    Par jagoulard dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 13/01/2005, 20h42

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