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.
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;
}
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 .
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 !