salut,
je veux réalisé sous DEV C++ un programme qui me permet de tester des clavier. En effet, pour cela j'ai utilisé un HOOK sans DLL qui me permet de lire toutes les touches entrée par l'utilisateur sur sont clavier et les afficher ensuite les stockée sur un fichier texte.
mon programme fonction bien.
une partie du programme et la suivante :
void MsgLoop()
{
MSG message;
BOOL bRet;
printf("debut msg loop\n");
// while ((bRet=PeekMessage(&message,NULL,0,WM_KEYLAST,PM_QS_INPUT))!=0)
while ((bRet=GetMessage(&message,NULL,0,0))!=0)
{ printf("debut while\n");
if (bRet == -1)
{printf("erreur message loop");
exit(1);
}
if(message.message== WM_CLOSE )
{
system("PAUSE");
break;
}
else
{
TranslateMessage( &message );
DispatchMessage( &message );
}
}
printf("fin while\n");
}
//-----------------------------------------------------------------------------------
// enregistreur de touche (key logger)
//-----------------------------------------------------------------------------------
DWORD WINAPI KeyLogger(LPVOID lpParameter)
{
//***************************************************
// Récuperation de l'instance de notre executable
//***************************************************
HINSTANCE hExe = GetModuleHandle(NULL);
if (!hExe) return 1;
printf("on demarre le hook\n");
//***********************
// on demarre le hook
//***********************
hKeyHook = SetWindowsHookEx (WH_KEYBOARD_LL,(HOOKPROC) KeyEvent,hExe, 0);
if(hKeyHook==NULL)
printf("[le hook clavier a plante !]\n");
else
printf("[hook clavier en cours ...]\n");
//***************************
// Boucle des messages
//*****************************
MsgLoop();
printf("desactive hook\n");
//***************************
// on desactive le hook
//***************************
if(UnhookWindowsHookEx(hKeyHook)==0)
printf("[desactivation du Hook echoue !]");
else
printf("[la desactivation du hook c'est passee correctement]");
return 0;
}
le problème c'est je suis obligé d'appelé la fonction MSGloop() dans la fonction KeyLogger
pour que le programme attend et me permet ainsi d'affiché les touches appuyé.
mais le souci c'est que pour quitté le programme je suis obligé de fermer la fenêtre. donc le hook n'est pas désactivé.
alors que se que je veux faire est :
1- activé le hook
2- choisir une touche pour sortir du hook
3-sortire du hook
4- choisir entre continué le programme ou pas
5-si oui continuée si non sortir en ferment le hook.
ma solution actuel qui fonctionne a moitié est :
au moment que l'utilisateur appuie sur la touche "CAPITAL" j'envoie un message pour entrée dans la boucle
case VK_CAPITAL: {printf("<CAPITAL>");Beep(SI,200);PostMessage(NULL,WM_CLOSE,0,0);break;}
une à l'intérieur de la boucle MSGloop j'envoie un message
if(message.message== WM_CLOSE )
{
system("PAUSE");
break;
sans arriver à sortir de la boucle et désactivé le hook comme le prévoie le programme