Soyez le premier à donner votre avis sur cette source.
Snippet vu 9 683 fois - Téléchargée 33 fois
'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
9 août 2005 à 08:39
Sinon, ton code en sauvera sûrement plus d'un ;)
DarK Sidious
9 août 2005 à 10:38
La seule chose qui m'embette c'est cette partie du code :
vk1 = vk2
vk2 = vk3
vk3 = p.vkCode
Car :
1°- Si j'appui sur SHIFT avant CTRL, la combinaison ne fonctionnera pas.
2°- Il faut que la combinaison soit réalisée très rapidement (voir exemple ci-dessous)
Essai de rajouter le code suivant (la ligne juste sous vk3 = p.vkCode)
:
frmMain.Label1.Caption = vk1
frmMain.Label2.Caption = vk2
frmMain.Label3.Caption = vk3
Et tu comprendra pourquoi je dis qu'il faut que la combinaison soit réalisée très rapidement.
J'ai trouvé une petite solution, qui serait de mettre
If Not p.vkCode = vk3 Then
vk1 = vk2
vk2 = vk3
vk3 = p.vkCode
End If
Seulement, si je fais CTRL, puis SHIFT, puis A, il me valide la combinaison, alors que c'est bien différent de CTRL+SHIFT+A.
Quelqu'un a-t-il une solution ?
9 août 2005 à 13:44
bouv<< quand tu fais [Alt F4] _ tu commences par F4 ou bien par AlT ??? Le but est bien evidemment ici de faire un racourci clavier conventionnel ...
9 août 2005 à 13:55
De plus cela ne résoud pas le problème de la vitesse à laquelle doit être executée l'opération.
Sinon, j'avais oublié de noter :
- Code simple, clair, concis et bien commenté ; même si j'aurais préféré qu'il soit indenté (peut être à cause du site ?)
9/10 pour les petits défaut dont j'ai parlé plus haut.
12 août 2005 à 17:36
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.