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 |
Partager