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 dll sur plateforme 64bit


Sujet :

Windows

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut Hook dll sur plateforme 64bit
    Salut,
    Je développe le logiciel WinSplit Revolution (voir signature). Il se trouve que dans la dernière version, j'ai mis en place un hook pour détecter quand une fenêtre commence à être déplacée. Sur 32 bit tout fonctionne correctement, mais sur un xp ou vista 64 ça marche pas très bien.

    Je mets en place un hook sur le CBT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    bool InstallCBTHook()
    {
    	if(m_hookCBT)
    		return true;
    
    	m_hookCBT = SetWindowsHookEx(WH_CBT, MovingCBTProc, m_hDllInstance, 0);
    	return m_hookCBT != NULL;
    }
    Et dans la callback de détection je fais :
    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
    LRESULT CALLBACK MovingCBTProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
        if (nCode == HCBT_SYSCOMMAND)
        {
            if(wParam == SC_MOVE)
            {
                //*** Ici j'avertis ma fenetre qui va processer ce qu'il faut quand on drag une fenetre  
                PostMessage(hwndWinSplitFrame,WSM_STARTMOVING,wParam,(LPARAM)NULL);
            }
        }
        if (nCode == HCBT_MOVESIZE)
        {
                PostMessage(hwndWinSplitFrame,WSM_STOPMOVING,wParam,(LPARAM)NULL);
        }
    
    	return CallNextHookEx(m_hookCBT,nCode,wParam,lParam);
    }
    Lorsqu'une fenêtre (n'appartenant pas à mon programme) commence à être déplacée je poste un message à mon application pour que le traitement commence. Lorsque que la fenêtre en question appartient à un processus 32bit ça fonctionne, en revanche lorsqu'elle appartient à un processus 64bit le callback ne semble pas être exécuté. J'ai testé directement à la place du postmessage un MessageBox, et il s'affichait uniquement quand je déplaçais une fenetre appartenant à un processus 32 bit. J'ai testé ce matin en compilant avec mingw sur une plateforme 64bit, ça ne marchait toujours pas. Est ce qu'il faut utiliser un compilo 64 sur la 64bit, ou est ce que c'est un problème de compatibilité que cro$oft n'a pas encore corrigé ou je ne sais pas?...

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Il me semble avoir lu quelque part (MSDN ?) que dans ce cas, il faut 2 hook différents. 1 qui gère les appli 32 bits et 1 pour les 64 bits.

    Je ne me rappelle plus où exactement et je n'ai pas mes URL favorites ce soir. Plus d'info si nécessaire plus tard.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    ok super cool j'attends alors

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Pour MS 64bits, tu compiles ta dll en 64bits ou tu fournis une dll 32bits et t'appuies sur le mode de compatibilité de windows ?

    Dans le deuxième cas, c'est normal que ça fonctionne pas, dixit msdn : SetWindowsHookEx Function.

    Extrait :

    SetWindowsHookEx can be used to inject a DLL into another process. A 32-bit DLL cannot be injected into a 64-bit process, and a 64-bit DLL cannot be injected into a 32-bit process. If an application requires the use of hooks in other processes, it is required that a 32-bit application call SetWindowsHookEx to inject a 32-bit DLL into 32-bit processes, and a 64-bit application call SetWindowsHookEx to inject a 64-bit DLL into 64-bit processes. The 32-bit and 64-bit DLLs must have different names.
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    comme j'ai expliqué dans mon premier post, j'ai essayé ce matin de compiler la dll et meme mon application sur un xp64 mais ça ne marchait quant meme pas

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Citation Envoyé par reptils Voir le message
    comme j'ai expliqué dans mon premier post, j'ai essayé ce matin de compiler la dll et meme mon application sur un xp64 mais ça ne marchait quant meme pas
    tu as compilé avec un sdk 64bits ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    J'utilise wxWidgets, que j'ai effectiviement compilé sur la machine en 64 bit. Apres quelques recherches sur le net je me rend que c'est visiblement plus compliqué à mettre en place. Le problème vient vraiment du Hook. C'est dans le style de ce dont ram_0000 parlait.

    http://forum.madshi.net/viewtopic.ph...b7bfdf3ca77816

    J'ai pas tout bien compris, mais ça me semble etre la solution. J'ai remarqué un autre soft (TaskBar Shuffle) utlisant les hooks aussi avait des problemes sur 64 bits.

Discussions similaires

  1. [DB2] Export/Import sur plateforme différente
    Par marsup54 dans le forum DB2
    Réponses: 2
    Dernier message: 26/08/2009, 11h36
  2. probleme de debug d'une dll sur pc 64bits
    Par giova_fr dans le forum MFC
    Réponses: 2
    Dernier message: 12/12/2005, 16h40
  3. Réponses: 3
    Dernier message: 21/10/2005, 09h54
  4. cours dll sur visual c++
    Par hiko-seijuro dans le forum MFC
    Réponses: 6
    Dernier message: 22/07/2005, 09h28
  5. PB pour Appel fonction dans DLL sur Builder3
    Par Fbartolo dans le forum C++Builder
    Réponses: 15
    Dernier message: 10/03/2005, 12h58

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