Rajoutez des raccourcis clavier dans vos programmes !!!

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 683 fois - Téléchargée 33 fois

Contenu du snippet

ce code permet d'intercepter les racourcis clavier _ voici un exemple qui retrouve la combinaison CTRL SHIFT A tapée au clavier _

Source / Exemple :


'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

Conclusion :


voilà j'ai bricolé ça pour implémenter le racourci clavier dans un soft de capture d'écran _ comme ça je peus faire des captures d'écran par simple pression dune combinaison de touches pendant un jeu vidéo par exemple

A voir également

Ajouter un commentaire Commentaires
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 129
9 août 2005 à 08:39
Une petite précision : les hook sont très instables sous VB en mode éxécution : ne cliquez pas sur le bouton "Stop" de VB lors de l'éxécution d'un hook, sinon, vous plantez l'IDE. Quittez plutôt proprement le prog par le bouton de fermeture.

Sinon, ton code en sauvera sûrement plus d'un ;)

DarK Sidious
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
9 août 2005 à 10:38
Ouais, effectivement cela peut etre très utile.
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 ?
soldier8514 Messages postés 295 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 24 janvier 2014 1
9 août 2005 à 13:44
Bien vu DARKSIDIOUS _ ça ma paru tellement évident que je n'ai pas pensé à le préciser _

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 ...
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
9 août 2005 à 13:55
Oui je suis bien d'accord, mais tu sais des fois on fait les choses tellement vite que pour CTRL+ALT+A on peut inverses l'ordre entre CTRL et ALT (ce qui pour les raccourcis Windows ne pose pas de problème).

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.
soldier8514 Messages postés 295 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 24 janvier 2014 1
12 août 2005 à 17:36
je pense en faire un ocx _faut dire que mettre 3 lignes de codes dans une fiche c'est déjà trop pour moa ... alors si je peus réduire à 2... ;)

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.