необработанная обработка ввода (различение вторичной мыши)

Я писал несколько рисунков в необработанном вводе winapi. Кажется, он работает, хотя я не уверен, насколько он надежен (безошибочен) (и если он будет работать на всех системных машинах и т. д., это немного беспокоит)

также возникает много вопросов, один из них

Я хотел бы использовать свою первую (я имею в виду обычную/базовую мышь) по-старому, это processint WM_MOUSEMOVE и т. д. и движущийся курсор со стрелкой, только вторичная мышь, которую мне нужно обработать с помощью raw_input (основная может оставаться нетронутой с помощью rawinput), проблема в том,

1) как я могу быть уверен, что мышь, обнаруженная rawinput, является вторичной?

2) вторая мышь перемещает также мой курсор-стрелку, если я отключу его с помощью RIDEV_NOLEGACY, то оба курсора не двигаются (он стал песочными часами), и это тоже неправильно

думаю, может быть, мне следует настроить его немного по-другому, моя функция setup rawinput похожа на

    void SetupRawInput()
    {

    static RAWINPUTDEVICE Rid[1];

    Rid[0].usUsagePage = 0x01;
    Rid[0].usUsage = 0x02;
    Rid[0].dwFlags = 0;     //   Rid[0].dwFlags =  RIDEV_NOLEGACY;   /
    Rid[0].hwndTarget = NULL;

    int r = RegisterRawInputDevices( Rid, 1, sizeof(Rid[0]) );

    if (!r)  ERROR_EXIT("raw input register fail");

    }

как решить эту проблему и заставить ее работать? спасибо


person user2214913    schedule 24.03.2014    source источник


Ответы (1)


Я не знаю, лучший ли мой подход или нет, но вот как я это делаю для первого пункта в вашем вопросе:

Когда я обрабатываю WM_INPUT с помощью GetRawInputData(...), я проверяю, совпадает ли дескриптор устройства, возвращенный структурой RAWINPUTHEADER (содержащийся в структуре RAWINPUT, возвращаемой функцией), с устройством, которое я хочу использовать. Если это не так, то я просто не заморачиваюсь, отправляя данные обратно, если это так, я затем обрабатываю данные RAWINPUTMOUSE, возвращенные в структуре RAWINPUT.

И если вам интересно, как получить список устройств, вы можете использовать GetRawInputDeviceList(...), который вернет дескрипторы устройств мышей, с которыми вы пытаетесь работать.

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

Что касается пункта № 2, кажется вероятным, что он влияет на обе мыши, поскольку Windows имеет монопольный доступ к мышам, поэтому вы не можете зарегистрировать одну конкретную мышь, не зарегистрировав их всех с одинаковыми флагами. Но кто-то с большим знанием, чем я, вероятно, мог бы дать лучшее объяснение.

person Mike    schedule 20.08.2014