Hook de la souris avec DLL (marche à moitié !? o_o )

Résolu
cs_lol55 Messages postés 86 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 5 décembre 2010 - 6 oct. 2007 à 13:15
cs_lol55 Messages postés 86 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 5 décembre 2010 - 15 oct. 2007 à 22:42
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 oct. 2007 à 15:25
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++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 oct. 2007 à 10:09
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++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 oct. 2007 à 00:31
Je t'ai fait un exemple ici:
http://www.cppfrance.com/code.aspx?ID=44378

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 oct. 2007 à 13:32
hhk  = SetWindowsHookEx(WH_MOUSE_LL, mouseProc, thismod, 0);

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lol55 Messages postés 86 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 5 décembre 2010
6 oct. 2007 à 15:18
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!
0
cs_lol55 Messages postés 86 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 5 décembre 2010
7 oct. 2007 à 15:29
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 !!!
0
cs_lol55 Messages postés 86 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 5 décembre 2010
13 oct. 2007 à 01:04
Comprenez-vous ce que je cherche à faire ?
Ou ai-je mal expliqué !?
0
cs_lol55 Messages postés 86 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 5 décembre 2010
15 oct. 2007 à 22:42
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...
0
Rejoignez-nous