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 :

[API WIN32] Hook message


Sujet :

Windows

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut [API WIN32] Hook message
    Bonjour à tous,

    je suis en train de réaliser une petite dll permettant de récupérer les messages qui circule au sein d'une application. Cette dll est injecter dans l'application mais le hook de réception des message ne semble pas fonctionner...


    Point d'entrée de la DLL
    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
    BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) 
    { 
    	Hook::DllInstance = hModule;
    	switch (ul_reason_for_call) 
    	{ 
    	case DLL_PROCESS_ATTACH :
    		Log::Write("DLL_PROCESS_ATTACH");
    		Hook::InstallHook_CBT();
    		Hook::InstallHook_CALLWNDPROC();
    		break;
    	case DLL_THREAD_ATTACH : 
    		Log::Write("DLL_THREAD_ATTACH");
    		break;
    	case DLL_THREAD_DETACH :
    		Log::Write("DLL_THREAD_DETACH");
    		break;
    	case DLL_PROCESS_DETACH :
    		Log::Write("DLL_PROCESS_DETACH");
    		Hook::UninstallHook_CBT();
    		Hook::UninstallHook_CALLWNDPROC();
    		break;
    	} 
    	return (true); 
    }
    et le hook :


    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    HHOOK 		Hook::HookCbt 			= NULL;
    HHOOK 		Hook::HookCallWndProc 	= NULL;
    HINSTANCE 	Hook::DllInstance 		= NULL;
    
    LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
        HWND hWnd = (HWND)wParam;
        if (!hWnd)
            return 0;
        if (nCode == HCBT_MINMAX)
        {
        }
    	else if (nCode == HCBT_ACTIVATE)
    	{
    
    	}
    	else if (nCode == HCBT_CLICKSKIPPED)
    	{
    
    	}
    	else if (nCode == HCBT_CREATEWND)
    	{
    		Log::Write("Create Windows");
    	}
        else if (nCode == HCBT_DESTROYWND)
        {
            
        }
    	else if (nCode == HCBT_SETFOCUS)
    	{
    
    	}
        return (CallNextHookEx(Hook::HookCbt, nCode, wParam, lParam));
    }
    
    LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    	if (nCode < 0)
    	{
    		return CallNextHookEx(Hook::HookCallWndProc, nCode, wParam, lParam);
    	}
    	CWPSTRUCT *msg = (CWPSTRUCT *)lParam;
    	Log::Write(nCode);
    	if (nCode == WM_SETTEXT)
    	{
    		Log::Write((char *)lParam);
    	}
    
    
    	return CallNextHookEx(Hook::HookCallWndProc, nCode, wParam, lParam);
    
    }
    
    void Hook::InstallHook_CBT()
    {
    	if (Hook::HookCbt == NULL)
    	{
    		Hook::HookCbt = SetWindowsHookEx(WH_CBT, CBTProc, Hook::DllInstance, 0);
    		if (Hook::HookCbt == NULL)
    			Log::Write("ERROR - UNABLE TO INSTALL CBT HOOK");
    		else
    			Log::Write("CBT HOOK INSTALL SUCCESSFULLY");
    	}
    }
    
    void Hook::UninstallHook_CBT()
    {
    	if (Hook::HookCbt != NULL)
    	{
    		UnhookWindowsHookEx(Hook::HookCbt);
    	}
    }
    
    void Hook::InstallHook_CALLWNDPROC()
    {
    	if (Hook::HookCallWndProc == NULL)
    	{
    		Hook::HookCallWndProc = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, Hook::DllInstance, 0);
    		if (Hook::HookCallWndProc == NULL)
    			Log::Write("ERROR - UNABLE TO INSTALL CALLWNDPROC HOOK");
    		else
    			Log::Write("CALLWNDPROC HOOK INSTALL SUCCESSFULLY");
    	}
    }
    
    void Hook::UninstallHook_CALLWNDPROC()
    {
    	if (Hook::HookCbt != NULL)
    	{
    		UnhookWindowsHookEx(Hook::HookCallWndProc);
    	}
    }
    Mon fichier de Hook ressemble à cela :

    [17:11:59] - DLL_PROCESS_ATTACH
    [17:11:59] - CBT HOOK INSTALL SUCCESSFULLY
    [17:11:59] - CALLWNDPROC HOOK INSTALL SUCCESSFULLY
    [17:11:59] - DLL_THREAD_DETACH
    [17:12:19] - DLL_THREAD_ATTACH
    [17:12:21] - DLL_THREAD_ATTACH
    [17:12:21] - DLL_THREAD_ATTACH
    [17:12:27] - DLL_THREAD_ATTACH
    [17:12:27] - DLL_THREAD_ATTACH
    [17:12:27] - DLL_THREAD_ATTACH
    [17:12:27] - DLL_THREAD_DETACH
    [17:12:27] - DLL_THREAD_DETACH
    [17:12:30] - DLL_THREAD_ATTACH
    [17:12:30] - DLL_THREAD_ATTACH
    [17:12:31] - DLL_THREAD_DETACH
    [17:12:31] - DLL_THREAD_DETACH
    [17:12:31] - DLL_THREAD_ATTACH
    [17:12:31] - DLL_THREAD_ATTACH
    [17:12:31] - DLL_THREAD_DETACH
    [17:12:31] - DLL_THREAD_DETACH
    [17:12:42] - DLL_THREAD_ATTACH
    [17:12:42] - DLL_THREAD_ATTACH
    [17:12:42] - DLL_THREAD_DETACH
    [17:12:42] - DLL_THREAD_DETACH
    [17:12:58] - DLL_THREAD_DETACH
    [17:13:18] - DLL_THREAD_DETACH
    [17:13:18] - DLL_THREAD_DETACH
    [17:13:18] - DLL_THREAD_DETACH
    [17:13:18] - DLL_THREAD_DETACH
    [17:13:18] - DLL_THREAD_DETACH
    [17:13:18] - DLL_THREAD_DETACH
    [17:13:18] - DLL_THREAD_DETACH
    [17:13:18] - DLL_THREAD_DETACH
    [17:18:55] - DLL_PROCESS_ATTACH
    .....

    Si quelqu'un a une idée... vu que les nCode des messages ne se logue pas ... je suis preneur ^^

    Merci d'avance,
    Cordialement,
    NeoKript

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Es-tu sûr que le traitement des messages passe par CallWindowProc() ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Es-tu sûr que le traitement des messages passe par CallWindowProc() ?
    Après plusieurs test, la fonction SetWindowsHookEx renvoie bien quelque chose de valide, mais mes deux fonctions de hook (messages, fenêtres) ne semblent pas être appelées, j'ai mis un Log::Write("test") dans chacune et je n'ai toujours rien...


    Merci d'avance

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 699
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 699
    Points : 13 138
    Points
    13 138
    Par défaut
    SetWindowsHookEx attend le handle de l'application. Ce DLLInstance m'étonne

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

Discussions similaires

  1. HOOK API WIN32
    Par benjlomb dans le forum C++
    Réponses: 2
    Dernier message: 21/05/2010, 18h23
  2. [API Win32]Message au-dessus de tout
    Par CoDeAVE dans le forum C
    Réponses: 0
    Dernier message: 19/10/2009, 20h30
  3. [API Win32] Hook clavier
    Par NeoKript dans le forum Windows
    Réponses: 3
    Dernier message: 21/09/2009, 14h19
  4. API Win32
    Par benoit70 dans le forum MFC
    Réponses: 8
    Dernier message: 26/01/2004, 19h11
  5. [API win32] Récupérer le répertoire d'un profile
    Par sbeu dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 27/09/2002, 12h38

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