Почему я не могу получить исходные данные от мыши?

Я создаю приложение, которое будет переводить ввод с мыши на виртуальный джойстик. Я пытался выполнять ввод с помощью мыши на низком уровне, но получить положение мыши было недостаточно, поэтому я выбрал необработанный ввод, но теперь я застрял, я не могу получить данные от мыши.

int main(int argc, char** argv)
    {
        while (true) {
            printf("%d %d\n", mouse_x, mouse_y);
            Sleep(100);
        }

    }
    LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
        switch (uMsg) {
                case WM_CREATE:
                    RAWINPUTDEVICE Rid[2];

                    Rid[0].usUsagePage = 0x01;
                    Rid[0].usUsage = 0x02;
                    Rid[0].dwFlags = RIDEV_INPUTSINK;   // adds HID mouse and also ignores legacy mouse messages
                    Rid[0].hwndTarget = 0;

                    Rid[1].usUsagePage = 0x01;
                    Rid[1].usUsage = 0x06;
                    Rid[1].dwFlags = RIDEV_INPUTSINK;   // adds HID keyboard and also ignores legacy keyboard messages
                    Rid[1].hwndTarget = 0;
                    return 0;
                case WM_INPUT:
                {
                    UINT dwSize;
                    GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
                    LPBYTE lpb = new BYTE[dwSize];
                    GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER));
                    RAWINPUT* raw = (RAWINPUT*)lpb;

                    if (raw->header.dwType == RIM_TYPEKEYBOARD)
                    {
                    }
                    else if (raw->header.dwType == RIM_TYPEMOUSE)
                    {
                        mouse_x = raw->data.mouse.lLastX;
                        mouse_y = raw->data.mouse.lLastY;
                    }
                    delete[] lpb;
                    break;
                }
        }
    }

person R1per    schedule 05.07.2017    source источник
comment
Посмотрите на этот вопрос и ответьте... [Получить текущую позицию курсора](stackoverflow.com/questions/6423729/get-current-cursor-position) Это может помочь... Вы можете даже запустить поток в фоновом режиме, чтобы продолжать захват...   -  person TooGeeky    schedule 06.07.2017
comment
в размещенном коде отсутствует извлечение кнопок и вычисление (по сравнению с предыдущим вводом) направления движения мыши.   -  person user3629249    schedule 06.07.2017
comment
Перед использованием необработанных устройств ввода необходимо зарегистрировать их. Для этого используйте RegisterRawInputDevices.   -  person Asesh    schedule 06.07.2017
comment
С - это не С++, это не С.   -  person Stargateur    schedule 06.07.2017
comment
Кроме того, ваша оконная процедура никогда не будет вызвана, потому что вы не зарегистрировали эту оконную процедуру и используете main вместо WinMain.   -  person Asesh    schedule 06.07.2017