Перехват событий клавиатуры и мыши в одном хуке
Создаю библиотеку для операционной системы Windows, которая должна будет получать сообщения мыши и клавиатуры от определенного потока. Не могу определиться с тем, какой тип хука больше всего подходит под эту задачу. Сначала думал на WH_CALLWNDPROC, но, как оказалось, он не получает сообщения клавиатуры. Потом выбор пал на WH_GETMESSAGE. Я проверил, он получает как сообщения мыши так и сообщения клавиатуры, однако, определить какая клавиша клавиатуры была нажата я так и не смог. При нажатии левого и правого шифта, если смотреть на структуру MSG в wParam, выводит одну и ту же цифру.
LRESULT CALLBACK messageHandler(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
{
return CallNextHookEx(hookHandle, nCode, wParam, lParam);
}
MSG* pMSG = reinterpret_cast<MSG*>(lParam);
switch (pMSG->message)
{
case WM_KEYUP:
{
cout << pMSG->wParam << endl;
}
break;
}
return CallNextHookEx(hookHandle, nCode, wParam, lParam);
}
DWORD WINAPI messageDispatcher(LPVOID thread)
{
hookHandle = SetWindowsHookEx(WH_GETMESSAGE, messageHandler, GetModuleHandle(nullptr), *reinterpret_cast<DWORD*>(thread));
if (!hookHandle)
{
return GetLastError();
}
MSG message{};
while (GetMessage(&message, 0, 0, 0) > 0)
{
TranslateMessage(&message);
DispatchMessage(&message);
}
return 0;
}
Собственно вопроса всего два:
- Какой хук больше всего подходит для отлова событий как клавиатуры так и мыши?
- Как в текущем коде определить что был нажат именно VK_RSHIFT?