Я использую глобальные перехватчики из 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;
}