Hook de la souris avec DLL (marche à moitié !? o_o ) [Résolu]

Signaler
Messages postés
86
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
5 décembre 2010
-
Messages postés
86
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
5 décembre 2010
-
Bonjour à tous,

Je cherche à faire un Hook Globale de la souris AVEC une Dll. Je me suis aider des nombreuses source sur CPPFrance,

Voici mon code,
Le code de la DLL (nommé E) :
http://monsitecpp.free.fr/admin/Hook/E/
Le code principal :
http://monsitecpp.free.fr/admin/Hook/Souris/
(Evidement dans les options du Linker je met E.lib pour qu'il puisse appeler les fonction et je met aussi E.dll dans le dossier du programme ;) )

Malheuresement mon Hook fonctionne à moitié, il n'est pas Gloabal ! En
effet il doit afficher une message lorsqu'un évènement de la souris
s'est produit mais il l'affiche seulement quand je passe le poiteur
sur ma fenêtre de Visual Studio (Projet Souris) qui est en train d'exécuter mon
programme...

Comment faire pour que mon Hook soit Global et intercepte TOUS les évènements de la souris !?

Merci Beaucoup pour votre Aide !

8 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Nous sommes fin 2007, plus jamais inférieur à cela:
#define _WIN32_WINNT 0x0501


Va voir un peu les exemples de hook, j'en ai fait des tas (et d'autres aussi).
Surtout, jamais de MessageBox ou autre truc bloquant dans la fonction de hook.

ciao...
BruNews, MVP VC++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
AJOUTER UN MENU A NOTEPAD (WIN32)
http://www.cppfrance.com/code.aspx?ID=28181


Regarde VerifNotepadProcess() comment je détermine si est processus notepad.
Toi tu vérifieras si est processus de Shell_TrayWnd:
FindWindow()
GetWindowThreadProcessId()
et avec GetCurrentProcessId() comparé avec celui obtenu au dessus, on sait où on est.

ciao...
BruNews, MVP VC++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Je t'ai fait un exemple ici:
http://www.cppfrance.com/code.aspx?ID=44378

ciao...
BruNews, MVP VC++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
hhk  = SetWindowsHookEx(WH_MOUSE_LL, mouseProc, thismod, 0);

ciao...
BruNews, MVP VC++
Messages postés
86
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
5 décembre 2010

Plus ien ne se passe lorsque j'utilise WH_MOUSE_LL ! Et je n'ai même plus de MessageBox qui s'affiche lorsque je mets le curseur sur la fenêtre de Visual Studio (de mon Projet Souris) .

Pourrais-ce être lié a #define _WIN32_WINNT 0x0400 !? Car lorsque j'enlève cette ligne, il ne connais plus WH_MOUSE_LL.

Merci!
Messages postés
86
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
5 décembre 2010

Je me suis aidé de ce code :
http://www.cppfrance.com/codes/HOOK-DLL-HOOK-FACILE-POUR-VB6_41774.aspx
J'ai un modifié pour qu'il Hook la souris comme je le souhaitait et ça marche ! J'arrive enfin à "Hooker" globalement !
(Il est vrai qu'il ne faut pas utiliser de fonction(s) bloquante tel que MessageBox dans l'Hook, Merci du conseil BruNews ! )

Mon but est maintenant de récupérer tous les évènements de la souris effectués (jusqu'à là c'est bon) sur la barre des tâches (là c'est plus dur ! )

Voici pour le moment la fonction Procédure de mon Hook :
LRESULT CALLBACK HookBarredesTachesProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode >= 0)
    {
            FILE* Fichier = NULL;
            Fichier = fopen("test.txt", "r+");
           
            if (Fichier != NULL)
            {
                fseek(Fichier, 0, SEEK_END);
                fputs("OK ! \n", Fichier);
                fclose(Fichier);
            }
    }
   
    return CallNextHookEx(HookBarredesTaches, nCode, wParam, lParam);
}

J'ai une variable Hwnd Global correspondant à l'Handle de la barre des tâches (la fenêtre "Shell_TrayWnd" )
Comment pourrais-faire pour savoir si lorsque je reçois un évènement dans mon Hook (donc de la souris), s'il est adressé à la barre des tâches !?

Je cherche un moyen de faire cela depuis plusieurs semaines mais je ne trouve toujours pas...
J'ai aussi regardé du côté de l'ID du processus,... si cela avait un rapport, je ne sais pas trop.

Merci Beaucoup pour votre Aide !!!
Messages postés
86
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
5 décembre 2010

Comprenez-vous ce que je cherche à faire ?
Ou ai-je mal expliqué !?
Messages postés
86
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
5 décembre 2010

Merci Beaucoup [auteur/BRUNEWS/39449.aspx BruNews] !!! C'est exactement ça que je cherchais à faire !

Vraiment merci s'est super sympa de t'as part, je te revaudrai ça , c'est rare de voir des gens aussi sympa !

Je regarderai tout ça de plus prêt en détail ce week-end, là je suis...