[Dev C++] disparition hook

Signaler
Messages postés
6
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
23 avril 2005
-
Messages postés
6
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
23 avril 2005
-
Salut,



je commence en C++, et je voudrais creer un hook global avec Dev-C++

Le code de la dll et de l'exe se compile sans erreur, les fonction de
mises en place et de désinstallation des hooks marchent, mais le Hook,
ne s'effectue pas!!



Voila le code de la dll :
















#include <windows.h>

HHOOK hhk;
HINSTANCE hThisMod;

LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam);
__declspec (dllexport) int InitHook (void);
__declspec (dllexport) int EndHook (void);

LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if ( nCode < 0 || nCode == HC_NOREMOVE )
return CallNextHookEx(hhk, nCode, wParam, lParam);

// Pour éviter les répétitions
if (((DWORD)lParam & 1<<30) != FALSE)
return CallNextHookEx(hhk, nCode, wParam, lParam);








if (wParam== 'A')
{
MessageBeep(MB_OK);
return 1;
}










return CallNextHookEx(hhk, nCode, wParam, lParam);
}

BOOL APIENTRY DllMain (HINSTANCE hinst, DWORD reason, LPVOID reserv)
{
if (reason==DLL_PROCESS_ATTACH)
hThisMod = hinst;
return 1;
}






__declspec (dllexport) int InitHook (void)
{
if (!hhk)
hhk = SetWindowsHookEx (WH_KEYBOARD, (HOOKPROC)KeyboardProc, hThisMod, 0);

return 1;
}






__declspec (dllexport) int EndHook (void)
{
if (hhk)







{
UnhookWindowsHookEx (hhk);
return 1;
}
return 0;
}



La fonction InitHook me renvois 1 (donc la fonction est bien appelé
et elle retourne une valeur), et la fonction EndHook 0 (donc le hook
n'a pas lieu)..



Mais par contre je comprends pas pourquoi !!



Ca fait un bout de temps que je cherches et toute aide est bienvenue.

7 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Ta fonction InitHook renvoie 1 à tout coup, tu n'as donc aucune garantie que réussira.

ciao...
BruNews, MVP VC++
Messages postés
6
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
23 avril 2005

Oui, c'est juste pour tester la communication entre la dll et l'exe, je
me sers de la fonction EndHook pour savoir si la mise en place du hook
a lieu (et la ca n'a pas lieu).



Mais par contre, je vois vraiment pas pourquoi !!!
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Verifie avec Depends.exe que ta fonction KeyboardProc() est correctement exportée, on ne sait jamais.

ciao...
BruNews, MVP VC++
Messages postés
6
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
23 avril 2005

Erf je trouve 4 fonction, dont 2 fois le KeyboardProc()



Sinon a part ca et la dll "MSJAVA.dll" introuvable
(mais bon je penses pas que dans ce contexte ca soit important...)
et 2 Warnings :



Warning: At least one delay-load dependency module was not found.

Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.



Tout ce passe bien, ca mis a part.



En tournant un peu le code j'ai réussis a faire un Hook local avec cette fontion
KeyboardProc() de la dll
Messages postés
6
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
23 avril 2005

Je viens de trouver, le probleme vient de Dev C++



Donc je compile la dll avec Borland, et le programme avec Dev C++

Par contre ton programme m'a été tres utile BruNews,



Merci beaucoup
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,

Si tu es sous Windows 2000 ou XP, voici un hook clavier qui marche avec Dev c++ :

http://www.cppfrance.com/code.aspx?id=27169

La procédure de hook est dans le même exécutable.
Messages postés
6
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
23 avril 2005

Erf non, rien ne marche, c'est vraiment bizard!!



pourtant pas d'erreur, mais bon j'ai trouvé la solution en compilant la dll avec le compilateur en ligne de commande de Borland,



Merci quand meme