2010-08-16 5 views
1

J'utilise des crochets de bas niveau, mais je ne peux pas déterminer quelle touche a été enfoncée. Les valeurs sont les mêmes pour chaque touche. Est-ce que je fais quelque chose de mal?Quelle touche a été enfoncée? Crochets pour clavier

méthode Hook

void hook() { 

    /** this part is probably not important since I use global WH_KEYBOARD_LL, is that right? */ 
    HWND hwnd = FindWindow(NULL, "Vertices.exe"); 
    HINSTANCE instance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); 
    /** end part */ 

    SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, instance /** or NULL ? */, NULL); 
} 

définition de rappel (j'ai contenu dans l'application)

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam); 

Les valeurs données avec une touche pressée

nCode:0 | wParam:0x100 | lParam:0x18fe14 

seulement les changements de wParam à 0x101 sur la touche haut (0x100 sur la touche enfoncée)

+0

Si je peux demander, quel est le scénario global? Il pourrait y avoir d'autres moyens de réaliser ce que vous essayez de faire. Également, y a-t-il des appels d'API que vous faites échouer? Avez-vous vérifié la valeur de retour de SetWindowsHookEx? – obelix

+1

avez-vous même essayé de le rechercher dans MSDN? lParam est plus qu'un simple nombre. Je suis aussi d'accord avec obelix sur le fait qu'il y a probablement une meilleure façon d'atteindre votre objectif global que l'accrochage au clavier. – tenfour

+0

@tenfour Merci, c'était vraiment utile. Pourriez-vous le poster comme une réponse avec 'KBDLLHOOKSTRUCT * kbdStruct = (KBDLLHOOKSTRUCT *) lParam;'. Merci –

Répondre

3

KBDLLHOOKSTRUCT *kbdStruct = (KBDLLHOOKSTRUCT*)lParam;

:)

Questions connexes