Я использую глобальные хуки из user32.dll с dllimport в C #.Клавиатура 1 работает нормально, но проблемы с колесом мыши являются проблемой.Это мой обратный вызов для события мыши:
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 , я использую этот код, который должен выполнять эту работу:
приватное статическое int GetWheelDeltaWParam (int wparam) {return (int) (wparam>)> 16);}
Но вывод всегда равен 0, что не имеет никакого смысла.
EDIT - результат:
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;
}