bool Application::winEventFilter(MSG *msg, long *result)
{
UINT dwSize;
WCHAR keyChar;
switch(msg->message)
{
case WM_INPUT:
{
if (GetRawInputData((HRAWINPUT)msg->lParam,
RID_INPUT,
NULL,
&dwSize,
sizeof(RAWINPUTHEADER)) == -1) return false;
LPBYTE lpb = new BYTE[dwSize];
if (lpb == NULL) return false;
if (GetRawInputData((HRAWINPUT)msg->lParam,
RID_INPUT,
lpb,
&dwSize,
sizeof(RAWINPUTHEADER)) != dwSize)
{
delete[] lpb;
return false;
}
PRAWINPUT raw = (PRAWINPUT)lpb;
UINT Event;
Event = raw->data.keyboard.Message;
keyChar = GetSymbol(raw->data.keyboard.VKey);
char keyCharLO = (char)keyChar;
delete[] lpb;
if (!iswprint(keyChar))
return false;
// process data from keyboard
keyStrokeHandle->ProcessNextKeyStroke(Event, keyChar);
*result = 0;
return true;
}
default:
{
return false;
}
}
}
bool Application::winEventFilter(MSG *msg, long *result)
{
UINT dwSize;
WCHAR keyChar;
switch(msg->message)
{
case WM_INPUT:
{
if (GetRawInputData((HRAWINPUT)msg->lParam,
RID_INPUT,
NULL,
&dwSize,
sizeof(RAWINPUTHEADER)) == -1) return false;
LPBYTE lpb = new BYTE[dwSize];
if (lpb == NULL) return false;
if (GetRawInputData((HRAWINPUT)msg->lParam,
RID_INPUT,
lpb,
&dwSize,
sizeof(RAWINPUTHEADER)) != dwSize)
{
delete[] lpb;
return false;
}
PRAWINPUT raw = (PRAWINPUT)lpb;
UINT Event;
Event = raw->data.keyboard.Message;
keyChar = GetSymbol(raw->data.keyboard.VKey);
char keyCharLO = (char)keyChar;
delete[] lpb;
if (!iswprint(keyChar))
return false;
// process data from keyboard
keyStrokeHandle->ProcessNextKeyStroke(Event, keyChar);
*result = 0;
QApplication::winEventFilter(msg, result);
return true;
}
default:
{
return false;
}
}
}
To copy to clipboard, switch view to plain text mode
After RegisterRawInputDevices call, application starts to recieve WM_INPUT messages.
Bookmarks