Creer un hook dans une dll

zinotron Messages postés 65 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 11 septembre 2004 - 25 janv. 2004 à 18:02
zinotron Messages postés 65 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 11 septembre 2004 - 26 janv. 2004 à 07:42
Je n'ai pas tout compris moi ...
j'ai fait une rechercher dans les systeme de creation de hook dans l'API win32, et je compris cela : RIEN.
enfin si j'ai capte deux trois choses, mais pas assez pour aller coder ...
alors, je voudrais faire un hook de thread (donc dans une dll)
j'ai capte les fonction kil fallait utiliser, mais pas comment les foutre dans une dll, ni comment les utiliser dans le prog ...
si qq1 peut m'aider .../
merci
ps: j'ai deja mate les hook de thread dans cppfrance :-)

2 réponses

lastpixl Messages postés 56 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 16 février 2006
25 janv. 2004 à 20:48
Un hook de thread est un hok qui s'applique uniquement au thread auquel il est attaché.
Donc pas forcément dans une Dll

Les hokk qui sont obligatoirement dansune Dll sont de hook systeme : ils s'appliquent à tout le systeme.

Pour un hook Dll :
Faire un Dll-Loader :

HINSTANCE hinstDLL; // instance de la DLL
hinstDLL = LoadLibrary("HddlProj.dll"); // Chargement de la librairie
if (!hinstDLL) // Erreur lors du chargement de la librairie ?

A ce moment la dll est chargée.

Puis a la suite du if :

{//Gestion erreur } else{
InitHooks = (TInitFunc)GetProcAddress(hinstDLL, "@InitHook$qpv");
}

GetProcAdress est unefonction ed la dll, exportée et qui permet d'initialiser les hooks (Pour les fonction exportées il existe plein de tuts bien faits...)

Et une fois la dll chargée on initialise le hook :

//Dans la dll
HHOOK KeybdHookHandle;
LRESULT CALLBACK KeybdProc(int nCode,WPARAM wParam,LPARAM lParam); //Le prototype
HINSTANCE HInst; // Handle d'intance de la DLL

//Il faut bien sur mettre la valeur du handle de linstance de la dll dans HInst

void _export InitHook(HWND hDest) //_export -> si tu as BCB5
{
KeybdHookHandle = SetWindowsHookEx(WH_KEYBOARD, // Créer un hook sur le clavier
(HOOKPROC)KeybdProc, // Utiliser la fonction KeybdProc
HInst, // Dans la DLL d'instance HInst
0); // Pour tous les threads

}

Apres ya plus qu'à créer une fonction callback pour gerer un hook, clavier ici

LRESULT CALLBACK _export KeybdProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if (nCode < 0) // do not process message
return CallNextHookEx(KeybdHookHandle, nCode,
wParam, lParam);
//Gestion du message

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

Et rajouter une fonction qui au dé-attachement de la dll qui dé-registre les hooks :

void EndHook()
{
// Supression des hooks
UnhookWindowsHookEx(KeybdHookHandle);

}

Voila...

En esperant avoir clarifié les choses,
Lastpix'l
0
zinotron Messages postés 65 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 11 septembre 2004
26 janv. 2004 à 07:42
bon, j'ai plus qua prendre une bonne dose d'acide acetyle-salycilique, un bon café et une clope, ca devrait mieux aller.
merci :-)
A+
0
Rejoignez-nous