Bonjour,
Quand on fait un hook dans une DLL, il y a un petit problème à résoudre au niveau du programme principal qui lance la DLL !
En effet, la fonction DLL qui lance le HOOK revenant immédiatement dans le programme principal, il ne faut pas que le programme principal se termine, sinon la DLL se termine aussi et le HOOK est perdu !
J'ai envisagé trois solutions pour bloquer le programme principal, sur les 3, les deux premières fonctionnent très bien et je voudrais savoir, à votre avis, laquelle consomme le moins de ressources système et éventuellement si vous connaissez d'autres solutions encore plus astucieuses pour arriver au même résultat.
1ère solution qui marche: je fais une petit programme principal sans fenêtre et après l'appel de la DLL, j'utilise la fonction API32:
2ème solution qui marche: je fais un programme principal avec une fenêtre (éventuellement invisible) et après l'appel de la DLL, le programme principal reste bloqué sur sa boucle:
3ème solution qui ne marche pas: je fais un programme principal sans fenêtre, je m'arrange pour que l'appel de la fonction qui lance la DLL me transmette en retour le handle du HOOK, puis après le retour de la fonction DLL et toujours dans le programme principal, j'utilise la fonction API32:
WaitForSingleObjectEx(hookdll, INFINITE, false);
qui est sensée bloquer sur le non changement d'état de n'importe quel objet, mais qui visiblement ne bloque pas pour ce type d'objet.
J'ai quand même un avis sur les solutions 1 & 2, de mon point de vue, il me semble que c'est la solution 1 qui consomme le moins. A discuter donc.
Merci
Partager