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

Delphi Discussion :

Hook et PostMessage


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 59
    Par défaut Hook et PostMessage
    Bonjour,

    J'essaie de faire marcher un hook sur mon application. Le tout marche plutot pas mal mais mon hook ne capte pas les messages que j'envoie par PostMessage alors qu'il capte ceux envoyés par SendMessage...

    Quelqu'un a une idée d'ou peut venir mon probleme ?

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    //##################################
    // Ajout du Hook
    mHookWndCall      := SetWindowsHookEx(WH_CALLWNDPROC,@NewCallWndProc,Hinstance,GetCurrentThreadID);
     
    //##################################
    // Mon Hook
    function NewCallWndProc(aCode: Integer; awParam: WPARAM; alParam: LPARAM): LRESULT; stdcall;
    var
      pMessage : PCWPSTRUCT;
      lMsg : TMessage;
      lControl : TWinControl;
      lPoint : TPoint;
      lRect : TRect;
    begin
        pMessage := PCWPSTRUCT( alParam );
     
        //// -------------------------------
        lMsg.Msg := pMessage^.message;
        lMsg.LParam := pMessage^.lParam;
        lMsg.WParam := pMessage^.wParam;
        lMsg.Result := 0;
        lControl := FindControl(pMessage^.hwnd);
        if lControl<>nil then
          Trace.WriteWndMsg(lMSg,lControl.ClassName)
        else
          Trace.WriteWndMsg(lMSg);
        //// -------------------------------
     
      ////  ....
     
      Result := CallNextHookEx(mHookWndCall, aCode, awParam, alParam );
    end;
     
    //##################################
    // Envoi d'un message
    PostMessage(Handle,WM_USER,0,0);
    En surchargeant le wndProc du controle auquel j'envoie le message je peux voir que le SendMessage et le PostMessage marchent

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 59
    Par défaut
    Personne n'a la moindre petite idée ?

  3. #3
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Salut,
    j'espère que tu n'as pas oublié UnhookWindowsHookEx dans ton code


    Sinon
    Le Hook WH_CALLWNDPROC ne fonctionne que si le message à été envoyé avec SendMessage.
    Pourquoi ? parce que SendMessage "demande au système de
    - passer le message au Hooks présents
    - puis relaye le message à la procédure de la fenètre de destination

    Alors que PostMessage, l'envoie directement a la procédure de la fenètre de destination.

    Bref, PostMessage est à l'email ce que SendMessage est au Coliposte (avec le facteur qui ouvre ton colis)

    C'est pour ça que si tu veux simuler un clic de souris, tu as de façons de faire (voir le dernier défi Delphi).

    Avec PostMessage, l'envoi du message WM_LeftClick est envoyé directement à la fenètre et le curseur de la souris ne bouge pas à l'écran alors qu'avec SendMessage, si.

    Le seul moyen d'intercepter un PosMessage, c'est avec GetMessage ou PeekMessage, placé dans la boucle d'un thread

    Bon dev

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 59
    Par défaut
    Citation Envoyé par waskol
    j'espère que tu n'as pas oublié UnhookWindowsHookEx dans ton code
    No problem, je l'ai bien fait

    Merci pour l'explication, c'est bien ce que j'avais observé mais je me demandais si iavait pas moyen de les capter quand meme..., on va dire que c'est po possib alors


    Encore merci.

Discussions similaires

  1. [HOOK] Problème(s) pour réaliser le tutoriel sur les HOOKS
    Par Rodrigue dans le forum C++Builder
    Réponses: 13
    Dernier message: 27/07/2016, 18h22
  2. [Hook] Clavier Microsoft office keyboard
    Par merzhin dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 01/06/2004, 13h59
  3. [WinAPI C++] MultiThreading et PostMessage
    Par Gruik dans le forum Windows
    Réponses: 7
    Dernier message: 29/03/2004, 15h58
  4. [MFC] Ctrl/Alt+touches avec PostMessage
    Par Fladnag dans le forum MFC
    Réponses: 4
    Dernier message: 10/02/2004, 14h33
  5. touche pour accéder à une application : hook system?
    Par Fox_magic dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 22/01/2003, 00h02

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