Создание новых MouseWheelEventArgs для Global Mouse Hook

1

В соответствии с MSDN ниже представлен конструктор MouseWheelEventArgs

public MouseWheelEventArgs(
    MouseDevice mouse,
    int timestamp,
    int delta
)

Это метод моего Глобального мышиного крючка, который я пытаюсь выполнить:

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
    if (nCode >= 0 && MouseMessages.WM_MOUSEWHEEL == (MouseMessages)wParam)
    {
        MouseDevice mouseDev = InputManager.Current.PrimaryMouseDevice;

        MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));

        //Initializes a new instance of the MouseWheelEventArgs class using the specified MouseDevice, timestamp, and delta.
        MouseAction(null, new MouseWheelEventArgs(mouseDev, timestamp, delta));
    }
    return CallNextHookEx(_hookID, nCode, wParam, lParam);
}

Я ищу:

Временная метка - хорошо ли просто генерировать текущее время на лету?

delta - вы должны иметь возможность программно получить это с устройства мыши каким-то образом, но как?

  • 0
    Спасибо! это было сложно найти в Интернете, не могли бы вы добавить это в ответ.
Теги:
wpf

1 ответ

3
Лучший ответ

Источник ссылки может показать вам, что timestamp извлекается из "Environment.TickCount".

Статья библиотеки MSDN для MSLLHOOKSTRUCT может показать вам, что delta передается как верхнее слово элемента MSLLHOOKSTRUCT.mouseData. Убедитесь, что вы объявили этот элемент как int, а не как uint, чтобы расширение знака работало правильно.

Таким образом:

   int timestamp = Environment.TickCount;
   int delta = hookStruct.mouseData >> 16;
   MouseAction(null, new MouseWheelEventArgs(mouseDev, timestamp, delta));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню