Цель:
Отследить юзера, когда он нажал и держит несколько кнопок клавиатуры одновременно (с помощью хука WH_JOURNALRECORD).
Проблемы:
1. При нажатии нескольких кнопок строго одновременно не ото всех поступает WM_KEYDOWN.
2. При нажатии как в п. 1 и отпускании не всегда срабатывают все WM_KEYUP, т.о. счетчик нажатых оказывается больше нуля, а все кнопки уже отпущены.
Вопрос:
Как бы так сделать, чтобы счетчик работал правильно?
p.s. В мсдн-е четко сказано: нажал — получил down, держишь — получаешь down, отпустил — получил up.
Фрагмент кода:
HHOOK MyHook;
unsigned int PrevDown = 0;
unsigned int HoldCount = 0;
unsigned int HoldNum = 3; // например
LRESULT CALLBACK MyHookProc(int code, WPARAM wParam, LPARAM lParam)
{
if (code == HC_ACTION)
{
EVENTMSG *msg = (EVENTMSG*) lParam;
if (msg->message == WM_KEYDOWN)
{
if (PrevDown != msg->paramH)
{
PrevDown = msg->paramH;
if (++HoldCount == HoldNum)
{
HoldCount = 0; // код упрощен немного
// что-то происходит
}
}
} else if (msg->message == WM_KEYUP && HoldCount)
{
PrevDown = 0;
HoldCount--;
}
}
return CallNextHookEx(MyHook, code, wParam, lParam);
}