文章导读
在使用Qt进行Windows开发时,你是否想获取外设(如触摸板、键盘、鼠标)的输入事件?使用RAWINPUT是一种有效的方法。本文将带你一步步实现这一功能,让你轻松获取外设的具体信息。
使用RAWINPUT获取外设输入的步骤
1. 在构造函数中注册窗口句柄:
HWND m_hwnd = this->winId;
RegisitWindow(HWND hwnd);
2. 注册RawInput设备:
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;
}
3. 重写nativeEvent函数:
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(
