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 6 et antérieur Discussion :

conversion des Virtual-key codes


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 26
    Points : 20
    Points
    20
    Par défaut conversion des Virtual-key codes
    bonsoir,

    Je suis en train de développer une application sous VB6 dont une partie est de convertir les virtual-key codes en lettres selon la langue de la fenêtre active ou clavier (FR, EN, AR) j'utilise les APIs de hook (CallNextHookEx, SetWindowsHookEx, UnhookWindowsHookEx) mais j'arrive pas a savoir les APIs nécessaires pour avoir le résultat voulu (ToAsciii, ToUnicode, MultiByteToWideChar, GetKeyboardLayout, MapVirtualKey,...)??

    Pouvez vous m'aider ?

    merci d'avance

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    Une fonction à tester, que j'ai faite en VBA mais ça devrait fonctionner aussi en VB et donner des pistes d'utilisation des API.

    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
     
    Option Explicit
     
    ' Déclaration pour nom des touches
    Private Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" _
                            (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long
    Private Declare Function MapVirtualKeyEx Lib "user32" Alias "MapVirtualKeyExA" _
                            (ByVal wCode As Long, ByVal wMapType As Long, ByVal dwhkl As Long) As Long
    Private Declare Function GetKeyboardLayout Lib "user32" (ByVal idThread As Long) As Long
    Private Declare Function GetWindowThreadProcessId Lib "user32" _
                            (ByVal hWnd As Long, lpdwProcessId As Long) As Long
    Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" _
                            (ByVal pwszKLID As String, ByVal flags As Long) As Long
    Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" _
                            (ByVal pwszKLID As String) As Long
    Private Const KLF_ACTIVATE = &H1
     
    '------------------------------------------------------------------------
    ' Renvoit le texte d'une touche à partir de son code
    '------------------------------------------------------------------------
    Public Function KeyNameFromKeyCode(pKeyCode As Long, Optional pHwnd As Long, Optional pLanguId As String) As String
    Dim lKeyCode As Long
    Dim lBuffer As String
    Dim lSize As Long
    Dim lThreadId As Long
    Dim lOldLayout As String
    If Len(pLanguId) > 0 Then
        lOldLayout = String(8, "0")
        GetKeyboardLayoutName lOldLayout
        LoadKeyboardLayout pLanguId, KLF_ACTIVATE
    End If
    If pHwnd <> 0 Then
        lThreadId = GetWindowThreadProcessId(pHwnd, 0)
    End If
    lKeyCode = MapVirtualKeyEx(pKeyCode, 0, GetKeyboardLayout(lThreadId))
    lKeyCode = lKeyCode * &H10000
    lBuffer = Space$(256)
    lSize = GetKeyNameText(lKeyCode, lBuffer, 256)
    KeyNameFromKeyCode = Left$(lBuffer, lSize)
    If Len(lOldLayout) > 0 Then
        LoadKeyboardLayout lOldLayout, KLF_ACTIVATE
    End If
    End Function
    Les virtual key codes :
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx

    Les identifiants de langage :
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx
    (à mettre en texte hexa dans le 3è paramètres)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    KeyNameFromKeyCode(&h08,,"00000407")
    retourne "RÜCK"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    KeyNameFromKeyCode(&h08,,"0000040C")
    retourne "RET.ARR"

    Le deuxième paramètre est un identifiant de fenêtre optionnel pour éventuellement rechercher le clavier actif d'une fenêtre.
    Le troisième paramètre est un texte optionnel contenant le sous-langage pour les 4 premiers caractères et la langage primaire pour les 4 caractères suivants.
    Si les deux paramètres optionnels sont vides, le nom de touche recherché correspond au clavier actif.

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    bonsoir,
    merci pour l'astuce, je vais l'essayer

Discussions similaires

  1. Conversion des codes visual Basic 6 en java
    Par pndem1 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 11/12/2012, 16h40
  2. Virtual-Key Codes en visual C++ Express 2005
    Par lahoucineinfo dans le forum Windows
    Réponses: 3
    Dernier message: 29/11/2008, 15h24
  3. Conversion des codes VBA Access en VB6
    Par cokouT dans le forum Access
    Réponses: 1
    Dernier message: 23/11/2006, 09h52
  4. Virtual-key code
    Par lyrau dans le forum Windows
    Réponses: 2
    Dernier message: 29/03/2003, 19h22

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