- 'Dans le Form :
- '--------------
-
- Private Sub Form_Load()
- 'on crochete le clavier pour toujours savoir ce kil sy passe
- hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf KeyboardLowLevelProc, App.hInstance, 0&)
-
- End Sub
-
- Private Sub Form_Unload(Cancel As Integer) 'quand on quitte
-
- UnhookWindowsHookEx hHook
-
- End Sub
-
- '-----------------------------------
- 'Dans un module:
- '--------------
-
- Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
- Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
- Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
- Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
- Public hHook As Long
- Public Const WH_KEYBOARD_LL = 13
- Public Const VK_RWIN = &H5B
- Public Const VK_LWIN = &H5C
- Public Type HOOKSTRUCT
- vkCode As Long
- scanCode As Long
- flags As Long
- time As Long
- dwExtraInfo As Long
- End Type
- Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
- (Destination As Any, Source As Any, ByVal Length As Long)
-
- Dim vk1 As Long
- Dim vk2 As Long
- Dim vk3 As Long
-
- Public Function KeyboardLowLevelProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
- Dim p As HOOKSTRUCT ' variable pour récupérer le vk code
- 'si idhook < 0 alors pas de traitement
- If idHook < 0 Then
- 'appeler le hook suivant
- KeyboardLowLevelProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
- Else
- 'copie la structure de lParam
- CopyMemory p, ByVal lParam, Len(p)
-
- vk1 = vk2
- vk2 = vk3
- vk3 = p.vkCode
-
-
- If vk1 = 162 And vk2 = 160 And vk3 = 65 Then MsgBox "Combinaison CTRL-SHIFT-A pressée au clavier"
- '( CTRL a le virtual key code 162
- ' SHIFT a le virtual key code 160
- ' A a le virtual key code 65 )
-
- 'appeler le hook suivant
- KeyboardLowLevelProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
- End If
- End Function
-
'Dans le Form :
'--------------
Private Sub Form_Load()
'on crochete le clavier pour toujours savoir ce kil sy passe
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf KeyboardLowLevelProc, App.hInstance, 0&)
End Sub
Private Sub Form_Unload(Cancel As Integer) 'quand on quitte
UnhookWindowsHookEx hHook
End Sub
'-----------------------------------
'Dans un module:
'--------------
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public hHook As Long
Public Const WH_KEYBOARD_LL = 13
Public Const VK_RWIN = &H5B
Public Const VK_LWIN = &H5C
Public Type HOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End Type
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)
Dim vk1 As Long
Dim vk2 As Long
Dim vk3 As Long
Public Function KeyboardLowLevelProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim p As HOOKSTRUCT ' variable pour récupérer le vk code
'si idhook < 0 alors pas de traitement
If idHook < 0 Then
'appeler le hook suivant
KeyboardLowLevelProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
Else
'copie la structure de lParam
CopyMemory p, ByVal lParam, Len(p)
vk1 = vk2
vk2 = vk3
vk3 = p.vkCode
If vk1 = 162 And vk2 = 160 And vk3 = 65 Then MsgBox "Combinaison CTRL-SHIFT-A pressée au clavier"
'( CTRL a le virtual key code 162
' SHIFT a le virtual key code 160
' A a le virtual key code 65 )
'appeler le hook suivant
KeyboardLowLevelProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
End If
End Function