Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

API WIN32 - Hook

4 réponses
Avatar
nigo
--------------------------------------------------------------------------------

Salut, je commence seulement à programmer avec l'api et j'ai voulu
comprendre comment créer un hook clavier basique.
J'ai lu le tutoriel http://tcharles.developpez.com/simul/#hooks et j'ai
essayé de créer un keylogger basique. Mais ca ne fonctionne pas. Voici le
code :

Code de la Dll :

Code :

FILE *memo; // Fichier dans lequel j'enregistre les touches tappées
par l'utilisateur
HHOOK HookClavier;
HINSTANCE HInst;

//Procédure du Hook
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
memo = fopen("C:\\hook.txt", "a"); // Ouverture du fichier dans
lequel j'enregistre les touches tappées par l'utilisateur

if(wParam == WM_KEYDOWN)
{
fprintf(memo, "%c", toascii((int) lParam));
}

return CallNextHookEx(HookClavier,nCode,wParam,lParam);
}


// Fonction qui active le hook
void ActiveHook()
{
HookClavier = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC) HookProc, HInst,
0);
}


// Désactive le hook
void EndHook()
{
UnhookWindowsHookEx(HookClavier);
}


// Fonction principale (exportée par la dll)
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
lpCmdLine, int nCmdShow )
{
HInst = hInstance;
int i;
i = 1;

ActiveHook();
while(i)
{ // boucle infinie. Je n'ai pas mis de condition pour la fin
du hook car je n'arrive déjà pas à l'activer.
}

EndHook();
return 0;
}
/Fin du Code


Voici ensuite le code de l'executable :
Code :

#include "stdafx.h"
#include "stdlib.h"
#include "windows.h"
#include "windowsx.h"

void main()
{
typedef void (WINAPI *DLL_Function_TestFunction) (void);
DLL_Function_TestFunction WinMain; // handle de la
farproc de la dll
HMODULE hDLL; // handle de
la dll


hDLL = LoadLibrary("C:\\temp\\hookClavier.dll");
WinMain = (DLL_Function_TestFunction)GetProcAddress(hDLL,"WinMain");
if (WinMain!=NULL) // Jusque là, ca marche, et la dll est chargée, et
la fonction aussi ( enfin, elles sont non-nulles ).
{
WinMain();
system("pause");
}
}

/Fin du Code

Voilà, si quelqu'un peut passer minutes pour m'engueuler pour la façon dont
je code comme un sale et me dire où sont les principales erreurs, ce serait
super sympa.

Merci.

4 réponses

Avatar
Christian ASTOR
nigo wrote:

Salut, je commence seulement à programmer avec l'api et j'ai voulu
comprendre comment créer un hook clavier basique.



Il faut utiliser un Shared Data Segment
Un vieil ex. que j'avais posté : http://tinyurl.com/ytofnr
Sinon, pour éviter la DLL, faire un Low Level Hook (WH_KEYBOARD_LL)
Avatar
nigo
Merci pour ton lien, j'ai regardé le code, je commence à le lire, mais il y
a quelque chose que je ne comprends pas :
=> Qu'est-ce que le Shared Data Segment ( une zone de mémoire partagée, ca,
j'ai compris, mais plus précisément ? )
=> A quoi ca sert concrètement ?
=> Comment l'utiliser ?

Si quelqu'un a un tuto ( en français, si possible, sinon, on fera
avec )...
Merci.

"Christian ASTOR" a écrit dans le message de
news: 47d59348$0$21146$
nigo wrote:

Salut, je commence seulement à programmer avec l'api et j'ai voulu
comprendre comment créer un hook clavier basique.



Il faut utiliser un Shared Data Segment
Un vieil ex. que j'avais posté : http://tinyurl.com/ytofnr
Sinon, pour éviter la DLL, faire un Low Level Hook (WH_KEYBOARD_LL)


Avatar
nigo
D'autre part, quels headers sont utilisés ici ? Parce qu'à la compilation,
j'ai les erreurs suivantes :

c:Documents and SettingsNicolasMes documentsHook
dllhookClavierhookClavier.cpp(96): error C2086: 'int HOOKDLL_API' :
redefinition

c:Documents and SettingsNicolasMes documentsHook
dllhookClavierhookClavier.cpp(96): error C2144: syntax error : 'int'
should be preceded by ';'

c:Documents and SettingsNicolasMes documentsHook
dllhookClavierhookClavier.cpp(82): error C2146: syntax error : missing ';'
before identifier 'LRESULT'

c:Documents and SettingsNicolasMes documentsHook
dllhookClavierhookClavier.cpp(82): error C2501: 'HOOKDLL_API' : missing
storage-class or type specifiers

c:Documents and SettingsNicolasMes documentsHook
dllhookClavierhookClavier.cpp(96): error C2501: 'HOOKDLL_API' : missing
storage-class or type specifiers




"nigo" a écrit dans le message de news:
fr48qg$9qd$
Merci pour ton lien, j'ai regardé le code, je commence à le lire, mais il
y a quelque chose que je ne comprends pas :
=> Qu'est-ce que le Shared Data Segment ( une zone de mémoire partagée,
ca, j'ai compris, mais plus précisément ? )
=> A quoi ca sert concrètement ?
=> Comment l'utiliser ?

Si quelqu'un a un tuto ( en français, si possible, sinon, on fera
avec )...
Merci.

"Christian ASTOR" a écrit dans le message de
news: 47d59348$0$21146$
nigo wrote:

Salut, je commence seulement à programmer avec l'api et j'ai voulu
comprendre comment créer un hook clavier basique.



Il faut utiliser un Shared Data Segment
Un vieil ex. que j'avais posté : http://tinyurl.com/ytofnr
Sinon, pour éviter la DLL, faire un Low Level Hook (WH_KEYBOARD_LL)






Avatar
Christian ASTOR
nigo wrote:

=> Qu'est-ce que le Shared Data Segment ( une zone de mémoire partagée, ca,
j'ai compris, mais plus précisément ? )



KB125677