Bonjour à tous,
j'ai créé le code suivant pour installer un hook global bas niveau sur le clavier, mais je n'arrive pas à récupérer l'info sur la touche qui a été pressée.
D'après la documentation de microsoft sur la fonction de callback LowLevelKeyboardProc, le paramètre wParam indique l'action de la touche (wm_keydown, ...) et le paramètre lParam est un pointeur vers une structure KBDLLHOOKSTRUCT .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #include <Windows.h> #include <iostream> using namespace std; HHOOK mouseHook; LRESULT __stdcall hookCallBack(int nCode, WPARAM wParam, LPARAM lParam) { cout<<lParam->vkCode<<endl; return CallNextHookEx(NULL,nCode,wParam,lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if (!(mouseHook = SetWindowsHookEx(WH_KEYBOARD_LL, hookCallBack, NULL, 0))) { cout << "Failed to install mouse hook!" << endl; } MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } UnhookWindowsHookEx(mouseHook); return msg.wParam; }
Cependant la ligne lParam->vkCode ne compile pas et j'ai l'erreur
=== Build: Release in clavier (compiler: GNU GCC Compiler) ===
clavier\main.cpp In function 'LRESULT hookCallBack(int, WPARAM, LPARAM)':
clavier\main.cpp 11 error: base operand of '->' is not a pointer
=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===
qui me dit que lParam n'est pas un pointeur (et d'ailleurs il me semble que lParam est un entier qui vaut 7142884). Avez-vous une idée de pourquoi cela, et de comment récupérer le vkCode (sans devoir faire appel à une fonction du style GetAsyncKeyState) ?
Merci d'avance !
Partager