Вот прототип моей функции:
LRESULT CALLBACK JournalRecoProc(int code, WPARAM wParam, LPARAM lParam)
{
}
Как я могу проверить внутри, была ли нажата кнопка ВВОД или кнопка мыши?
Я думаю, что следует использовать lParam, но я не мог найти как.
Как MSDN говорит :
Если подключаемая процедура возвращает сообщение в диапазоне WM_KEYFIRST в
WM_KEYLAST, применяются следующие условия:
- paramL член EVENTMSG структура определяет виртуальный код клавиши, которая была нажата.
- paramH член EVENTMSG структура определяет код сканирования.
- Нет способа указать количество повторов. Событие всегда используется для представления одного ключевого события.
Таким образом, вы получите к нему что-то вроде этого:
LRESULT CALLBACK JournalPlaybackProc(int code, WPARAM wParam, LPARAM lParam)
{
// ... blah blah ...
if (code == HC_GETNEXT)
{
// examine eventmsg
EVENTMSG *pEvent = (EVENTMSG*)lParam;
// keypress
if (pEvent->message >= WM_KEYFIRST &&
pEvent->message <= WM_KEYLAST)
{
// decode key press
unsigned int uVirtualKeyCode = pEvent->paramL;
unsigned int uScanCode = pEvent->paramH;
// do your conditional checks here
if (uVirtualKeyCode == VK_ENTER)
{
// Enter key was pressed
}
}
else if (pEvent->message == WM_LBUTTONDOWN)
{
// left mouse click
}
else // ... add checks for other messages ....
}
// ... blah blah ...
}
Других решений пока нет …