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

C

 > 

Windows

 > 

System

 > 

SetWindowsHookEx - Un classique, la callback n'est pas appelée...


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

SetWindowsHookEx - Un classique, la callback n'est pas appelée...

lundi 7 décembre 2009 à 17:42:50 | SetWindowsHookEx - Un classique, la callback n'est pas appelée...

Cemninho




Bonjour à tous,

Après avoir éplucher énormément de posts sur ce sujet en vain, je me tourne vers vous.

J'essaye de pouvoir capter les appuis touches sur un appareil mobile (Windows CE 5.0). Mon but est de pouvoir appeler une méthode de DLL GetKeystroke() qui me renverra le code correspondant à la touche appuyée.

Dans un premier temps, je travaille sans DLL, dans un projet 'Console' où je désire uniquement capter des appuis touches. Mon code n'a rien de méchant, il se limite pour le moment à l'appel de la méthode qui met en place le hook, suivi d'un Sleep de 10s.

Voici mon appel de SetWindowsHookEx

SetWindowsHookEx(WH_KEYBOARD_LL, LLKeyboardHookCallbackFunction, NULL, 0);
-> Je désire capter les appuis touche de manière globale (pas de fenêtre windows).

avec pour callback :
LRESULT CALLBACK LLKeyboardHookCallbackFunction(
int nCode,
WPARAM wParam,
LPARAM lParam )
{
printf("KeyStroke \n");
};


Constat : je n'entre jamais dans la callback, meme avec un appui touches simulé par le logiciel avec keybd_event. Est-ce que quelqu'un saurait me dire ce que je fais de travers ?

Merci

mardi 8 décembre 2009 à 14:33:10 | Re : SetWindowsHookEx - Un classique, la callback n'est pas appelée...

juju12

Bonjour;

Extrait du SDK pour ce hook :

This hook is called in the context of the thread that installed it. The
call is made by sending a message to the thread that installed the hook. Therefore, the thread that installed the hook must have a message loop.

Traduction : c'est pas une callback au sens propre du terme, il faut récupérer les messages (GetMessage-TranslateMessage-DispatchMessage...)
mardi 8 décembre 2009 à 17:17:52 | Re : SetWindowsHookEx - Un classique, la callback n'est pas appelée...

Cemninho


Je ne suis pas certain qu'il faille une pompe a message. GetMessage, DispatchMessage et TranslateMessage servent à traiter des messages propres aux fenêtres type WM_xxx. Or je n'ai aucune fenêtre de créée et donc forcément, pas de handle de fenêtre, nécessaire à l'appel de GetMessage par exemple...

Est-ce que tu pourrais me donner le lien de la page où tu as trouvé cet extrait ?

J'ai encore passé ma journée à me renseigner sur cette anomalie. Avec un code similaire, certaines personnes arrivent à recevoir les appuis touches, je n'y comprend rien.
Ma callback n'est jamais appelée et, ce qui est étrange, c'est qu'une fois une touche appuyée, le curseur de la souris se fige et le texte tapé n'est pas affiché à l'écran. Si derrière je tue mon application, tous les mouvements de souris qui ne se sont pas affichés jusque là s'executent soudainement et le texte tapé apparait à l'écran. C'est comme si les evenements s'accumulaient en mémoire sans jamais être dépilés.

Merci toutefois pour ta participation.


mardi 8 décembre 2009 à 18:30:49 | Re : SetWindowsHookEx - Un classique, la callback n'est pas appelée...

Cemninho

Je reviens avec beaucoup d'espoir ! Suite à ton post juju12, j'ai creusé dans ce sens là et en effet il est nécessaire d'avoir une pompe à message et par conséquent, une fenêtre !!!

Le fait est qu'il est nécessaire d'avoir un message WM_KEYDOWN pour pouvoir appeler la callback associée à SetWindowsHookEx. Par contre, il n'est pas nécessaire d'afficher la fenêtre (SW_HIDE) pour récupérer les évenements.

Bon bah ya plus qu'à !

Merci encore !



mercredi 9 décembre 2009 à 13:08:22 | Re : SetWindowsHookEx - Un classique, la callback n'est pas appelée...

juju12

Attention, pas de confusion : les piles de messages sont associées aux threads et pas aux fenêtres, donc tu peux très bien recevoir des messages même sans fenêtre (exemple : dialogue entre threads par messages WM_USER+X etc.)
Quant aux sources, tu peux chercher SetWindowsHookEx sur MSDN, ou télécharger le Platform SDK, indispensable pour développer sous Windows.


Cette discussion est classée dans : touches, callback, capter, appuis, setwindowshookex


Répondre à ce message

Sujets en rapport avec ce message

Problème de "pression de touches" [ par Quiske ] Bonjour tout le monde , je suis un programmeur débutant jeune 14 - 15 ans qui a un problème :Je voudrais dire a l'ordinateur que j'appuie sur une tou Pb pour recuper le callback [ par Lombric ] Je comprend pas bien comment faire pour recuperer un callback (de mon icon placer en barre des taches)pour faire apparaitre un menu par exemple en VC+ Convertir en visual basic [ par sfouilloux ] 'typedef struct _AC_ADT_GUI_CALLBACK {' PAC_ADT_SET_FINGER_STATUS AC_ADT_SetFingerStatus;' PAC_ADT_SET_MESSAGE AC_ADT_ fonction de callback [ par veve33 ] Bonjour,j'aimerais savoir comment faire du callback en c pour compiler sous unix mais aussi sous windows surement a terme.Mon but etant de faire une l Envoyer les touches du clavier. [ par Babou ] Bonjour,Je cherche un moyen d'envoyer la séquence de touches suivante : .Mais il faut que ce soit sur le port clavier, pas sur l'écran.Etant donné Envoyer des touches à un programme... [ par Mikonyx ] Salut, j'aimerais savoir comment on peut envoyer une séquence de touches (DEV c++) à un programme windows lorsque l'on connait le nom de sa fenêtre... URGENT: Comment bloquer touches en C++ [ par Fimagen ] Comment bloquer toutes les touches du clavier SAUF les numeriques et la touche "entrée"!!!Merci d'avance... Code ASCII [ par SuperDoudou ] SuperDoudouJe n'arrive pas trouver les touches dont les codes ascii sont 224 et 13.De +, est-ce que je me trompe si je pense que les codes ascii des touches presses en C++...help! [ par zanidip ] voilla,je cherche a detecter les touche clavier pessées (pour programmer pakman par exemple).j'ai essayé d'utiliser Keypress(x); mais ca marche pas.je Probleme pour récupérer des touches du clavier en c++ [ par TRASH52 ] TRASH52J'ai un probleme pour récupérer toutes les touches autres que les caractères! Les caractères peuvent etre recupere avec getch() ok, mais pou


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 5,710 sec (3)

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