Les hooks [Résolu]

Messages postés
9
Date d'inscription
lundi 1 août 2005
Dernière intervention
17 mars 2006
- - Dernière réponse : racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
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.
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Dernière intervention
14 novembre 2014
3
Merci
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

Merci racpp 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Dernière intervention
14 novembre 2014
3
Merci
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.

Merci racpp 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de racpp
Messages postés
1791
Date d'inscription
lundi 22 novembre 2004
Dernière intervention
31 janvier 2009
0
Merci
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;<
Commenter la réponse de cs_Joky
Messages postés
9
Date d'inscription
lundi 1 août 2005
Dernière intervention
17 mars 2006
0
Merci
LoadLibrary et GetProcAddress marche tres bien je l'ai tester
Commenter la réponse de faico
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Dernière intervention
24 juillet 2011
0
Merci
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.
Commenter la réponse de Gendal67
Messages postés
9
Date d'inscription
lundi 1 août 2005
Dernière intervention
17 mars 2006
0
Merci
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
Commenter la réponse de faico
Messages postés
9
Date d'inscription
lundi 1 août 2005
Dernière intervention
17 mars 2006
0
Merci
oui j'utilise DevC++
Commenter la réponse de faico
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Dernière intervention
24 juillet 2011
0
Merci
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.
Commenter la réponse de Gendal67
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Dernière intervention
24 juillet 2011
0
Merci
racpp> Je viens de tester ta source....en effet, ça compile et marche même avec Dev!
Commenter la réponse de Gendal67
Messages postés
9
Date d'inscription
lundi 1 août 2005
Dernière intervention
17 mars 2006
0
Merci
Le probleme c'est avec setwindowshookex elle me donne l'erreur suivante

impossible d'établir un hook non local sans un descripteur de module
Commenter la réponse de faico
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Dernière intervention
6 avril 2008
0
Merci
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 ?
Commenter la réponse de ncoder
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Dernière intervention
6 avril 2008
0
Merci
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;
}
Commenter la réponse de ncoder

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.