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 :

SetWindowsHookEx : pb de HINSTANCE


Sujet :

Windows

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut SetWindowsHookEx : pb de HINSTANCE
    Bonjour a tous ,

    Voila, j'ai un problème avec la fonction SetWindowsHookEx, voici le code :

    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
    HHOOK Hook_Souris;
    HINSTANCE DLL_instance;
    
    BOOL WINAPI DllMain( HINSTANCE hModule, DWORD fdwreason,  LPVOID lpReserved )
    {
        DLL_instance = hModule;
        return TRUE;
    }
    
    void dll_init_hook_souris()
    {
    
        Hook_Souris = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)Souris_proc, DLL_instance, 0);
    
        if(Hook_Souris == NULL)
        {
                    printf("La valeur du DLL_instance est de : %d\n", DLL_instance);
    		printf("L'initialisation du hook souris a echouee. valeur retournee : %d \n", GetLastError());
    
    		if(GetLastError() == ERROR_INVALID_HOOK_FILTER)
    	        printf("ERROR_INVALID_HOOK_FILTER: The hook code is invalid.\n");
    	    if(GetLastError() == ERROR_INVALID_FILTER_PROC)
    	        printf("ERROR_INVALID_FILTER_PROC: The filter function is invalid.\n");
    	    if(GetLastError() == ERROR_HOOK_NEEDS_HMOD)
    	        printf("ERROR_HOOK_NEEDS_HMOD: A global hook is being set with a NULL hInstance parameter or a thread-specific hook is being set for a thread that is not in the setting application.\n");
    	    if(GetLastError() == ERROR_GLOBAL_ONLY_HOOK)
    	        printf("ERROR_GLOBAL_ONLY_HOOK: A hook that can only be a system hook is being installed to a specific thread.\n");
    	    if(GetLastError() == ERROR_INVALID_PARAMETER)
    	        printf("ERROR_INVALID_PARAMETER: The thread ID is invalid.\n");
    	    if(GetLastError() == ERROR_JOURNAL_HOOK_SET)
    	        printf("ERROR_JOURNAL_HOOK_SET: There is already a hook set for a journal hook type. Only one journal record or journal playback hook can be installed at one time. This code can also be set if an application tries to set a journal hook while a screen saver is running.\n");
    	    if(GetLastError() == ERROR_MOD_NOT_FOUND)
    	        printf("ERROR_MOD_NOT_FOUND: The hInstance parameter for a global hook was not a library. (Actually, this value simply means that User was unable to locate the module handle in its list of modules.)\n");
    	}
    
    }
    
    LRESULT CALLBACK _export Souris_proc(int nCode,WPARAM wParam,LPARAM lParam)
    {
        if(wParam == WM_LBUTTONDOWN)
            printf("Clic gache appuye");
    
        return CallNextHookEx(Hook_Souris,nCode,wParam,lParam);
    }
    donc lorsque je le compile et lance le programme en lien avec cette DLL GetLastError me retourne comme numéro d'erreur : 1428 , ce qui correspond à l'erreur "ERROR_HOOK_NEEDS_HMOD: A global hook is being set with a NULL hInstance parameter or a thread-specific hook is being set for a thread that is not in the setting application." a première vue cela viendrai du DLL_instance (3eme parametre de la fonction SetWindowsHookEx) mais celui-ci semble valide car lorsque je charge la DLL dans le programme principale avec la fonction LoadLibrary(); il me retourne le même HINSTANCE que celui utilisé dans la fonction SetWindowsHookEx.

    Donc je pense que cela doit certainement venir d'une mauvaise utilisation de ma part de cette fonction, je veux l'utiliser pour faire un hook global (la valeur du 4eme parametre de cette fonction étant 0).

    Si quelqu'un pouvait me filer un coup de main, car la ca fait quelque temps que je seche dessus .

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    up
    Besoin d'aide svp je bloque toujours ...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    C'est bon le problème est résolu, je reviendrais prochainement pour poster une réponse avec le code complet pour la mise en place du hook

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 13
    Points : 13
    Points
    13
    Par défaut installation d'un hook
    Salut Benji

    J'ai le même pb que toi (erreur 1428).
    J'ai lu que tu as trouvé la solution.

    Peux-tu dire comment tu t'en es sorti ???

    Merci

Discussions similaires

  1. SetWindowsHookEx
    Par faico dans le forum Windows
    Réponses: 2
    Dernier message: 14/03/2006, 00h08
  2. j'ai un problème sur les hinstances
    Par ramaro dans le forum C++
    Réponses: 9
    Dernier message: 26/02/2006, 14h32
  3. HINSTANCE
    Par Pilou_m79 dans le forum MFC
    Réponses: 14
    Dernier message: 25/04/2005, 11h03
  4. Recupérer un HWND a partir d'un HINSTANCE
    Par yotasse dans le forum Windows
    Réponses: 2
    Dernier message: 30/01/2004, 16h00

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