begin process at 2012 02 14 09:23:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Windows

 > 

API

 > 

hook clavier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

hook clavier

jeudi 19 mars 2009 à 14:48:31 | hook clavier

jocou

Bonjour à tous

Petite question aux spécialistes :

Lorsqu'on positionne un hook clavier local (donc sur un thread particulier), est-ce que :

   - l'appli destinatrice reçoit la touche frappée PENDANT que la procédure du hook fait son traitement

ou bien

   - la procédure du hook exécute son traitement PUIS l'appli destinatrice reçoit la touche frappée


En fait, je voudrais faire la chose suivante :

1) récupérer les touches frappées pour une appli particulière A

2) si la touche est F5, exécuter un traitement AVANT que l'appli A ne reçoive la touche

3) à la fin de mon traitement, laisser l'appli A recevoir la touche F5 et s'exécuter normalement

Est-ce que le HOOK répond à ce mode de fonctionnement, ou bien y-a-t'il d'autres méthodes ?

Merci

jocou

jeudi 19 mars 2009 à 14:55:40 | Re : hook clavier

Renfield

Administrateur CodeS-SourceS
c'est bien cela...

tu te glisse en fait dans une chaine de hook.

tu recois un message, tu le traite, le transmet au maillon suivant.

en bout de chaine ? ton appli 'A'
jeudi 19 mars 2009 à 15:36:24 | Re : hook clavier

jocou

Salut Renfield

Je viens de tester et ça ne se passe pas comme je le voudrais :

Voici la procédure appelée par le hook :

Private Function fctCaptureF5( ByVal ncode As Integer , ByVal wparam As Integer , ByVal lparam As IntPtr) As Integer

if ncode = 0 Then

   If GetKeyState(VK_F5) < 0 Then

       MessageBox.Show("Capture écran 3270")

   End If

End If

Return CallNextHookEx(hHook, ncode, wparam, lparam)

End Function


Or, l'appli A traite le F5 AVANT que le msgbox monte à l'écran.

Peux-tu m'éclairer un petit peu ??

Merci



jocou

jeudi 19 mars 2009 à 15:44:45 | Re : hook clavier

Renfield

Administrateur CodeS-SourceS
utilises tu bien un WH_KEYBOARD_LL ?

(et puis j'aime pas ton test: If GetKeyState(VK_F5) < 0 Then)
jeudi 19 mars 2009 à 15:51:27 | Re : hook clavier

jocou

Voilà exactement ce que je fais :

Private
Const WH_KEYBOARD_LL As Integer = 13

kbHookProc =

New HookProc( AddressOf fctCaptureF5)

'hHook = SetWindowsHookEx(WH_KEYBOARD_LL, kbHookProc, IntPtr.Zero, 0)

hHook = SetWindowsHookEx(WH_KEYBOARD_LL, kbHookProc, hInstance, 0)


Et toi, qu'est-ce que tu fearis à la place de : If GetKeyState(VK_F5) < 0 Then ?

jocou
jeudi 19 mars 2009 à 16:25:39 | Re : hook clavier

Renfield

Administrateur CodeS-SourceS

lis la doc:
http://msdn.microsoft.com/en-us/library/ms644985(VS.85).aspx

ton lParam te les infos sur la touche concernée par le hook :
http://msdn.microsoft.com/en-us/library/ms644967(VS.85).aspx

donc faire:

Private Function fctCaptureF5( ByVal ncode As Integer , ByVal wparam As Integer , ByRef lparam As KBDLLHOOKSTRUCT) As Integer


je pense que le coté synchro de la GetKeyState fais que son etat est à false quand le message te parviens la première fois.
'A' le recoit, l'interprete.
lorsque tu relache la touche, Windows te renvoie un message pour t'en avertir.
a ce moment là, le GetKeyState t'indique que la touche est pressée: tu es en retard sur 'A'
jeudi 19 mars 2009 à 18:14:30 | Re : hook clavier

jocou

Private Function fctCaptureF5( ByVal ncode As Integer , ByVal wparam As Integer , ByRef lparam As KBDLLHOOKSTRUCT) As Integer

If (lparam.flags And KBDLLHOOKSTRUCTFlags.LLKHF_UP) = 0 And lparam.vkCode = 116 Then

MsgBox(lparam.vkCode &

"*" & lparam.scanCode)

End If

Return CallNextHookEx(hHook, ncode, wparam, lparam)

End Function


pas glop, c'est toujours pareil

As-tu une autre idée ?

jocou

jeudi 19 mars 2009 à 21:19:56 | Re : hook clavier

Renfield

Administrateur CodeS-SourceS
et nCode ? tu le testes pas ?

utilises VK_F5, pas 116 (plus lisible)


ton test est pas bon...

(lparam.flags And KBDLLHOOKSTRUCTFlags.LLKHF_UP) = KBDLLHOOKSTRUCTFlags.LLKHF_UP

si le flag est actif
jeudi 19 mars 2009 à 21:38:35 | Re : hook clavier

jocou

1) Effectivement, il faut tester le nCode = 0

2) Mea-culpa pour 116, VK_F5 est bien plus lisible

3) Je veux exécuter ma procédure lorsqu'on appuie sur la touche F5 et  la doc que tu m'as indiquée précise:

bit 7 : Specifies the transition state. The value is 0 if the key is pressed and 1 if it is being released.

4) Mais tout cela ne change rien : l'appli A traite toujours la touche F5 avant le msgbox s'affiche.

Que faire ???

jocou



Cette discussion est classée dans : appli, traitement, clavier, touche, hook


Répondre à ce message

Sujets en rapport avec ce message

trayicon, capture touche clavier [ par rdechap ] Bonjour,j'ai réalisé une appli qui ce met en trayicon et je souhaiterai capturer les touches du clavier quand l'appli est réduite...auriez-vous une so Hook Clavier [ par olixelle ] Bonjour,j'ai implémenté dans mon application un hook clavier afin qu'elle puisse etre piloté via le clavier.Tout marche bien.Cependant, si l'applicati Utilisation du clavier dans un programme [ par lapinjaune ] Bonjour,Je suis débutant en programmation et pour mes TP de bac j'ai réalisé un programme qui gère le port LPT du PC afin de contrôler un robot. Tout Probème avec "GetAsyncKeyState" et "GetKeyState" (VBA Word Office 2003) [ par Polack77 ] Voila, je veut faire une procèdure qui me permete de recup les touche taper au clavier simultanémant.Soit avoir comme retour de fonction :    -> " + " Déclanchement d'une combinaison de touche du clavier [ par neewby ] Bonjour a tous, j'essaye de trouver une fonction permettant de déclencher une combinaison de touche du clavier, comme si c'était l'utilisateur qui le Détecter touche l'appli étant déselectionnée [ par debutant VB ] Comment peut-on faire pour détecter des touches même si l'application n'est pas selectionnée ? Merci d'avance. desactivation d'une touche du clavier [ par dafu ] coucou tout le monde je voudrais savoir comment on fait pour desactiver une touche juste le temps du programme et la reactiver quand le programme est MACRO EVENEMENT TOUCHE CLAVIER EXCEL [ par bobo91 ] bonjour,Je cherche à faire une procedure à partir d'un evenement clavier dans une feuille excel donc dans mon cas avec la touche "supprimer"Je n'arriv Detecter des touche meme si le programme est minimizer [ par spike911 ] Bonjours,je veu créer un programme pour optimiser mon ordinateur. Le programme est simple, je veu créer une liste de racourci clavier. J'ai dejas comm Appuie touche clavier [ par jeje11991 ] Bonjour,J'aimerais un code, qui permette simplement de faire taper sur une lettre du clavier avec une appli vb ^^Merci de votre précieuse aide :p


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales