2012-10-14 5 views
-1

Следующая функция вызывается всякий раз, когда происходит событие нажатия клавиши:обнаружения нажата клавиша и клавиша выпустила событие

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

    printf("Key is pressed !\n"); 
    // If key pressed down,call function A 
    // If key released , call function B 
} 

Как обнаружить эти события?

Ключом к нажатию может быть любая клавиша от оконной клавиатуры . Я просто хочу знать, был ли нажат или был нажат ключ после нажатия. Как мне это сделать ?

+0

Вы должны использовать два различных сообщения: WM_KEYDOWN и WM_KEYUP –

+0

Вы можете найти множество примеров того, как сделать это в Интернете, ища кейлоггер –

ответ

1
static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    if (nCode >= 0) 
    { 
     if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) 
     { 
      functionA(); 
     } 
     else 
     { 
      functionB(); 
     } 
    } 
    return CallNextHookEx(hHook, nCode, wParam, lParam); 
} 
+0

чем разница между _WM_KEYDOWN_ и _WM_SYSKEYDOWN_? – saplingPro

+0

и он отлично работает без возврата CallNextHookEx (handleKeyboardHook, nCode, wParam, lParam); ' – saplingPro

+0

WM_SYSKEYDOWN возвращается для некоторых ключей, например, F10 - я думаю по историческим причинам. –

Смежные вопросы