получить WHEEL_DELTA из wParam в сообщении WM_MOUSEHWHEEL в C #

Я использую глобальные перехватчики из user32.dll с dllimport в C #. Клавиатура работает нормально, но срабатывает колесико мыши. Это мой обратный вызов события мыши:

        private IntPtr MouseInputCallback(
            int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode < 0) return CallNextHookEx(mouseHookId, nCode, wParam, lParam);

            int eventType = wParam.ToInt32();
            if (eventType == WM_MOUSEHWHEEL)
            {
                int wheelMovement = GetWheelDeltaWParam(eventType);
            }

            return CallNextHookEx(mouseHookId, nCode, wParam, lParam);
        }

Все идет нормально, пока мне не нужно получить значение WHEEL_DELTA, которое показывает, в какую сторону и сколько было прокручено колесо. Поскольку в C # отсутствует макрос GET_WHEEL_DELTA_WPARAM , я использую этот код, который должен выполнять эту работу:

private static int GetWheelDeltaWParam (int wparam) {return (число) (wparam >> 16); }

Но на выходе всегда 0, что не имеет никакого смысла.

РЕДАКТИРОВАТЬ - результат:

        MSLLHOOKSTRUCT mouseData = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
        int wheelMovement = GetWheelDeltaWParam(mouseData.mouseData);

        [StructLayout(LayoutKind.Sequential)]
        private struct MSLLHOOKSTRUCT
        {
            public Point pt;
            public int mouseData;
            public int flags;
            public int time;
            public long dwExtraInfo;
        }

5
задан user1151923 17 February 2012 в 16:14
поделиться