Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RAJOUTEZ DES RACCOURCIS CLAVIER DANS VOS PROGRAMMES !!!


Information sur la source

Catégorie :Périphériques Classé sous : raccourcis, clavier Niveau : Initié Date de création : 08/08/2005 Vu : 6 126

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note


Description

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

Source

  • '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

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


 

Commentaires et avis

signaler à un administrateur
Commentaire de DARKSIDIOUS le 09/08/2005 08:39:24 administrateur CS

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

signaler à un administrateur
Commentaire de bouv le 09/08/2005 10:38:07

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 ?

signaler à un administrateur
Commentaire de soldier8514 le 09/08/2005 13:44:33

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

signaler à un administrateur
Commentaire de bouv le 09/08/2005 13:55:02

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.

signaler à un administrateur
Commentaire de soldier8514 le 12/08/2005 17:36:27

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...  ;)

signaler à un administrateur
Commentaire de draluorg le 17/08/2005 14:15:06

Salut,

Pourquoi ne pas simplement a chaque fois que une des trois touches est enfoncee verifier si les deux autres le sont aussi ?

signaler à un administrateur
Commentaire de soldier8514 le 17/08/2005 15:20:26

on peut le faire avec GetKeyState , suffit 2 modifier 2 ou 3 lignes

signaler à un administrateur
Commentaire de bouv le 17/08/2005 15:24:33

Oui une source a été déposée avec cette API il y a qq jour...

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

BLocage raccourcis clavier [ par ezekiel95 ] Bonjour à tous!!!Qq'un saurait il comment faire pour bloquer/reaffecter des raccourcis clavier tq ctrl+alt+sup ou ctrl++esc?Je me suis longuement rens Raccourcis clavier => copier coller ??? [ par goldensteph ] Est-ce que quelqu'un connait un moyen de faire un raccourcis clavier pour copier coller... (j'ai coché la case dans le menu mais ca fonctionne pas !) Raccourcis clavier... [ par DadaPik ] Comment faire des raccourcis clavier (Alt+F1, Alt+F2...)Je pensais que c'était avec l'événement KeyPress mais apparement non... Et ou pourrais-je trou fenetre toujours active [ par kawa11 ] salut,j'ai un fenetre qui reste toujours au premier plan dans laquelle des boutons sont actives par des raccourcis clavier, mais je suis obligé de cli coller dans autre application [ par jetest ] bsoir à tousje voudrais copier un texte d'un textbox et le coller dans une autre application, mais je ne parviens pas a coller ailleur que dans mon ap Liste des raccourcis clavier utilisée ou test un raccourci clavier (VBA pour Word 2003) [ par Polack77 ] &nbsp;&nbsp;&nbsp; Salut tout le monde. Ca roule? Moi c cool (bient&#244;t le weekend ) &nbsp;&nbsp;&nbsp; Voila mon probl&#232;me: &nbsp;&nbsp;&nbsp; Inhibation de raccourcis clavier [ par gdu ] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Salut &#224; tous,Comment verrouiller mon application (VB6) afin qu'un utilis raccourci clavier et threads [ par julien__ ] Bonjour, je suis sous vb.net 2003,je cherche à faire des raccourcis clavier disponibles dans d'autres applications... je voudrais faire tourner l'appl [vb express] Raccourcis clavier dans windows [ par 85bmx85 ] Bonjour tout le monde, Comme vous le savez tous il est possible dans windows d'attribuer a un programme un raccourci clavier pour pouvoir le lancer ra raccourcis clavier personnalisables [ par 85bmx85 ] Salut a tous, je recherche un moyen qui permettrait a l'utilisateur de choisir lui meme les raccourcis clavier permettant telle ou telle action un peu


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,546 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.