跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何用Qt的RAWINPUT获取外设输入?

文章导读

在使用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(
                            

相关文章