IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

[HOOK] Les messages ne passent plus du tout après mon hook !


Sujet :

Windows

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut [HOOK] Les messages ne passent plus du tout après mon hook !
    Salut à tous,

    je suis entrain de faire une cure intensive de tutoriels sur les hook et de pages du site MSDN...mais là je ne comprend plus.

    Je met en place un HOOK via une DLL, par exemple sur le clavier.
    Pas de pb le hook fonctionne et l'application reçoit bien le message de ma DLL.

    Mais le problème est que je ne sais pas comment dire à windows de continuer à transmettre le message aux autres applications ou au contraire de ne pas le transmettre...

    Voilà ma fonction CALLBACK (pour information je fais un hook bas niveau sur le clavier et je voudrais que les messages injectés soient transmis aux autres applications sans passer par la mienne et si le message n'a pas été injecté, que ce soit mon application qui décide si le message doit continuer à être transmis ou pas).... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    extern "C" LRESULT CALLBACK __declspec(dllexport) LowLevelKeyboardProc(int nCode,
                                                                WPARAM wParam,
                                                                LPARAM lParam )
    {
       if &#40; nCode < 0 &#41;
          return CallNextHookEx&#40; VueDonnees->HookKeyboardHandle, nCode, wParam, lParam&#41;;
    
       KBDLLHOOKSTRUCT *hook_infos = &#40;KBDLLHOOKSTRUCT*&#41; lParam;
    
          // Vérifie que ce n'est pas un événement injecté
       if &#40; ! &#40; hook_infos->flags & LLKHF_INJECTED &#41; &#41;
          SendMessage&#40; VueDonnees->MainFormHandle, AM_KEYBOARD_HOOK, wParam, hook_infos->vkCode &#41;;
    
       return CallNextHookEx&#40; VueDonnees->HookKeyboardHandle, nCode, wParam, lParam&#41;;
    &#125;
    AM_KEYBOARD_HOOK est un message que j'ai défini moi même.

    L'application qui gère le Hook est une application écrite en C++ Builder, elle utilise donc le type TMessage pour traiter un message.
    Ma fonction qui traite le message AM_KEYBOARD_HOOK retourne au SendMessage de la DLL les valeurs suivantes (via TMessage.Result) :

    0 si le message doit être transmis aux autres applications
    1 si le message ne doit pas être transmis aux autres application
    .

    J'espère que vous pourez m'aider !
    Merci d'avance

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Je n'ai pas compris ce qui ne fonctionne pas. Ton application reçoit bien ton message apparement, qu'est-ce qui ne va pas ?

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Eh bien en fait le message devait soit être intercépté soit être transmis...
    Franchement je ne sais pas comment j'ai réussi à le faire marcher, il était tard ...mais ça marche...

    Merci quand même

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Avec un hook, il aurait été peut-être plus efficace de gérer un évènement plutôt qu'un SendMessage et un fichier mappé en mémoire .

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Que veux tu dire par gérer un événement ?

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    Le programme principal crée un évènement par l'API
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    			hGlobalEvent = CreateEvent&#40;NULL,         // no security attributes
    											TRUE,         // manual-reset event
    											FALSE,         // initial state is signaled
    											"myevent"&#41;;  // object name
    Pui un thread pour écouter l'event : je donne la fonction du thread.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    VOID RACThreadFunction&#40;LPVOID lpParam&#41; 
    &#123;
        DWORD dwWaitResult;
    	HWND hwndFG;
    
        for&#40;;;&#41;
    	&#123;
    		dwWaitResult = WaitForSingleObjectEx&#40;hGlobalEvent, 
    								              INFINITE, FALSE&#41;;    // indefinite wait
    
    		switch &#40;dwWaitResult&#41; 
    		&#123;
    			case WAIT_OBJECT_0&#58;
    //				Alerte&#40;"Got"&#41;;
                  ................................;
                  // on désarme l'évènement 
                  ResetEvent&#40;hGlobalEvent&#41; ;
     	      break; 
    
    		    // An error occurred.
    			default&#58; 
    				break;
    		&#125;
    	&#125;
    &#125;
    Enfin dans ta Dll de hook tu ouvres l'event , puis tu l'armes lorsqu'il le faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ............................
    // ouverture de l'event
    myEvent = OpenEvent&#40;EVENT_ALL_ACCESS, FALSE, "myevent";
    ............................
    ............................
    // Armement de l'event &#58;
    SetEvent&#40;myEvent &#41;;
    ..............................
    Tu peux avant d'avoir armé l'évènement avoir écrit des données sur un fichier mappe en mémoire.
    Comme celà, quand le tread du prog principal aura reçu l'évènement il pourra aller lire les données sur le fichier mappé.
    J'espère avoir été clair.

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Salut !

    Merci pour les infos tout fonctionne

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Les boutons ne marchent plus du tout
    Par yongxin dans le forum VB.NET
    Réponses: 3
    Dernier message: 01/07/2014, 16h08
  2. Réponses: 1
    Dernier message: 20/10/2008, 18h30
  3. Le TEdit ne recçoit plus les messages de la Souris
    Par bartak dans le forum C++Builder
    Réponses: 7
    Dernier message: 28/02/2005, 13h41
  4. Réponses: 6
    Dernier message: 11/01/2005, 12h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo