Les hooks

Résolu
faico Messages postés 9 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 mars 2006 - 13 mars 2006 à 14:54
racpp Messages postés 1910 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 14 mars 2006 à 16:21
Salam

j'ai trouvé un code pour un programme qui install un hokk de clavier pour empecher la touche imprimer ecran.

Mais je compile le programme cela ne marche pas il ne me donne rien, aidez moi s'il vous plait .

voila le code :

la DLL :

#include <windows.h>

#define WH_KEYBOARD_LL 13

/*

typedef struct {

DWORD vkCode;

DWORD scanCode;

DWORD flags;

DWORD time;

ULONG_PTR dwExtraInfo;

} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT; */



HINSTANCE moduleCourant;

HHOOK hookClavier;



LRESULT CALLBACK fonctionIntercepteClavierLowLevel (int nCode, WPARAM wParam, LPARAM lParam)

{

MessageBox(NULL,"func",0,0 );

if(nCode == HC_ACTION)

{

KBDLLHOOKSTRUCT kbStruct = *((KBDLLHOOKSTRUCT *)lParam);

switch(wParam)

{

case WM_KEYDOWN:


if (kbStruct.vkCode VK_LWIN || kbStruct.vkCode
VK_RWIN) // bloque touches windows

return 1;


if (kbStruct.vkCode == VK_ESCAPE &&
GetAsyncKeyState(VK_CONTROL)) // bloque control+echap

return 1;


if
(kbStruct.vkCode == VK_SNAPSHOT) // bloque impr écran

return 1;

}

}

return CallNextHookEx(hookClavier, nCode, wParam, lParam);

}



extern "C" __declspec(dllexport) int installeLeHookClavier()

{

if( !hookClavier )

{

MessageBox(NULL,"install",0,0 );

hookClavier =
SetWindowsHookEx(WH_KEYBOARD_LL, fonctionIntercepteClavierLowLevel,
moduleCourant, 0);

}

return (int) hookClavier;

}



extern "C" __declspec(dllexport) void ArreteLeHookClavier()

{

MessageBox(NULL,"arret",0,0 );

if(hookClavier)

{



UnhookWindowsHookEx(hookClavier);

hookClavier = 0;

}

}



BOOL WINAPI DllMain (HINSTANCE hDll, DWORD dwReason, LPVOID Reserved)

{

if (dwReason == DLL_PROCESS_ATTACH)

{

moduleCourant = hDll;

}

if (dwReason == DLL_PROCESS_DETACH)

{

ArreteLeHookClavier();

}

return 1;

}


Le programme main :

#include <windows.h>

#include "resource.h"



#pragma comment( lib, "hookToucheWindowsDll.lib" )



//extern "C" int __stdcall installeLeHookClavier();



//extern "C" void __stdcall ArreteLeHookClavier();

typedef void (*TEndFunc)();

TEndFunc installeLeHookClavier;

TEndFunc ArreteLeHookClavier;

HINSTANCE hinstDLL;



int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{

hinstDLL = LoadLibrary("hook.dll");

installeLeHookClavier=(TEndFunc)GetProcAddress(hinstDLL, "installeLeHookClavier");

ArreteLeHookClavier=(TEndFunc)GetProcAddress(hinstDLL, "ArreteLeHookClavier");

installeLeHookClavier();

Sleep(60000);

ArreteLeHookClavier();

return 1;

}



Merci d'avance.

12 réponses

racpp Messages postés 1910 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 15
13 mars 2006 à 16:46
Salut,

Gendal67 > Tu as vraiment essayé tous les codes de hook sur le site? Voir réponse ci-dessous.



faico > Tu peux utiliser mon code source de hook global clavier sans
DLL. Pas besoin donc de DLL, ça compile bien sur Dev-C++ et le hook
fonctionne parfaitement. Voici la source:

http://www.cppfrance.com/codes/HOOK-GLOBAL-SANS-DLL_27169.aspx
3
racpp Messages postés 1910 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 15
14 mars 2006 à 16:21
Bonjour,

ncoder > Gendal67 n'est pas le seul à se plaindre du problème avec
Dev-C++. Beaucoup avant lui se sont cassé la tête pour le résourdre en
vain. Soit ta version de Dev-C++ est améliorée, soit tu as réussi à le
paramètrer convenablement. Ce genre de problème existe aussi sur Visual
C/C++ 6. J'ai passé plusieurs semaines pour faire fonctionner une DLL
de hool global sur API sans pouvoir trouver la cause du problème. La
compilation se passe très bien, la DLL est générée mais le hook ne
fonctionne pas. J'avais l'intention d'abondonner définitivement le
projet mais quand j'ai essayé avec Visual C 2005, tout a fonctionné
sans rien toucher au code original. Cela prouve que les anciens
compilateurs ont des problèmes avec les hooks. Certes, Dev-C++ est un
bon compilateur mais il a ses limites comme Visual C 6.



faico > Si tu veux faire un hook clavier pour la touche "imprim
écran", tu n'as qu'à prendre le code source que j'ai indiqué plus haut.
Le code est beaucoup plus simple que le tien. Il suffit juste
d'adapter la procédure de hook à tes besoins.
3
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
13 mars 2006 à 14:58
Teste le retour des tes fonctions LoadLibrary

et GetProcAddress

Si pas le bon retour, tu seras d'où ça peut venir

if(!Meilleur("Joky")) return ERREUR;<
0
faico Messages postés 9 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 mars 2006
13 mars 2006 à 15:04
LoadLibrary et GetProcAddress marche tres bien je l'ai tester
0

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

Posez votre question
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
13 mars 2006 à 16:28
Salut,

sans faire de préjudice, tu n'utiliserais pas Dev-C++ par hasard? J'ai jamais réussi à faire fonctionner un hook avec; avec n'importe laquelle des sources présentes sur ce site.
0
faico Messages postés 9 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 mars 2006
13 mars 2006 à 16:36
le probleme est dans le dll


parceque lorsque je fait FormatMessage elle me donne l'erreur suivante :





impossible d'établir un hook non local sans un descripteur de module
0
faico Messages postés 9 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 mars 2006
13 mars 2006 à 16:36
oui j'utilise DevC++
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
13 mars 2006 à 16:40
Lol ok..et juste pour me rassurer, tu as déja réussi à compiler un programme de hook qui fonctionne ensuite, avec Dev-C++ ? Après avoir cherché où ça collait pas, j'ai fini par abandonné temporairement, le temps d'apprendre précisément avec un livre comme faire des hooks.
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
13 mars 2006 à 17:02
racpp> Je viens de tester ta source....en effet, ça compile et marche même avec Dev!
0
faico Messages postés 9 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 mars 2006
13 mars 2006 à 18:15
Le probleme c'est avec setwindowshookex elle me donne l'erreur suivante

impossible d'établir un hook non local sans un descripteur de module
0
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
14 mars 2006 à 08:33
J'ai toujours réussi à faire n'importe quel hook avec Dev !
Ceux que je prends sur cppfrance marchent aussi !

N'attaquez pas Dev Cpp je trouve que c'est un très bon compilateur lol !

Et GRATUIT

Alors pourquoi s'en plaindre ?

Sinon pour le code je ne vois strictement aucune différence particulière avec mes hooks claviers ! Je comprends pas pourquoi ça marcherai pas...
La seule différence c'est :

hookClavier = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC) fonctionIntercepteClavierLowLevel, moduleCourant, NULL);

Mais je pense pas que ça change quelque chose...
Aussi, es-tu sûr de #define WH_KEYBOARD_LL 13 ? Pourquoi le rajouter s'il est déjà dans windows.h ?
0
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
14 mars 2006 à 08:39
Voici mon code qui marche très bien :

/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


__declspec (dllexport) int HookC (void);
__declspec (dllexport) int EnleveHookC (void);


HHOOK hHook;
HINSTANCE hInstance;


LRESULT CALLBACK HookProc ( int nCode, WPARAM wParam, LPARAM lParam)
{
if ((nCode = = HC_ACTION) && (wParam == WM_KEYDOWN))
{
// Structure de récupération d'infos sur la touche tapée
KBDLLHOOKSTRUCT hookstruct = *((KBDLLHOOKSTRUCT*)lParam);


//Mets ce que tu veux ici
}

// Renvoi des messages au sytème pour permettre d'autres hooks
return CallNextHookEx(hHook, nCode, wParam, lParam);


}



__declspec (dllexport) int HookC (void)
{
if (!hHook) {
hHook = SetWindowsHookEx( WH_KEYBOARD_LL, (HOOKPROC) HookProc, hInstance, NULL);
}
return (int)hHook;


}


__declspec (dllexport) int EnleveHookC (void)
{


if (hHook) {
UnhookWindowsHookEx(hHook);
return 1;
}
return 0;


}






BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
hInstance=hInst;
break;
}



/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
0
Rejoignez-nous