标签:return Qt dwSize raw Windows hwnd -- rid lpb
使用RAWINPUT可以查看外设事件的具体信息,具体方法如下:
1.在 构造 函数里添加一下代码:
HWND m_hwnd = this->winId;
RegisitWindow(HWND hwnd);
2.注册RawInput设备
主要是用函数 RegisterRawInputDevice
使用方法如下:
bool Dialog::RegisitWindow(HWND hwnd)
{
if ( nullptr == hwnd ){
return FALSE;
}
RAWINPUTDEVICE rid; //设备信息
rid.usUsagePage = 0x0d;
rid.usUsage = 0x05; // 0X05 触摸板 06键盘 rid.usUsagePage = 0x01; rid.usUsage = 0x02; 为鼠标
rid.dwFlags = RIDEV_INPUTSINK;
rid.hwndTarget = hwnd;
if ( !RegisterRawInputDevices( &rid, 1, sizeof(RAWINPUTDEVICE) )){
return FALSE;
}
return TRUE;
}
将窗口句柄和RawInput注册在一起,如果不指定窗口和Flag则只有焦点在窗体时有效;
参考windows官方文档:
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-registerrawinputdevices
https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-rawinputdevice
3.重写 nativeEvent 函数
重写nativeEvent可以获取windows的消息循环,注册成功后,消息循环接受 IN_PUT,我们从中获取相关数据
bool Dialog::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
MSG* msg = (MSG*)message;
LPBYTE lpb;
RAWINPUT* raw;
UINT dwSize;
if(msg->message == WM_INPUT){
GetRawInputData((HRAWINPUT)msg->lParam, RID_INPUT, nullptr, &dwSize, sizeof(RAWINPUTHEADER));
lpb = new BYTE[dwSize];
if (lpb == nullptr)
return 0;
if (GetRawInputData((HRAWINPUT)msg->lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)) != dwSize )
OutputDebugString (TEXT("GetRawInputData does not return correct size !\n"));
raw = (RAWINPUT*)lpb;
if(raw->header.dwType == RIM_TYPEHID){
DWORD len = raw->data.hid.dwSizeHid;
int f = (len == 0x23)?raw->data.hid.bRawData[n]:raw->data.hid.bRawData[n];
qDebug() << f;
}
delete[] lpb;
}
return false;
}
上述 bRawData[]bRawData[],是依据具体协议来的
标签:return,Qt,dwSize,raw,Windows,hwnd,--,rid,lpb 来源: https://blog.csdn.net/renbenliu/article/details/121902097
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。