为全局鼠标钩子创建新的MouseWheelEventArgs

本文关键字:MouseWheelEventArgs 创建 全局 鼠标 | 更新日期: 2023-09-27 18:19:16

根据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 -您必须能够以编程方式从鼠标设备以某种方式获得此,但如何?

为全局鼠标钩子创建新的MouseWheelEventArgs

参考源可以向您显示timestamp是从"Environment.TickCount "中检索的。

关于MSLLHOOKSTRUCT的MSDN Library文章可以向您展示delta是作为MSLLHOOKSTRUCT的上字传递的。mouseData元素。确保将该成员声明为int,而不是int,以便符号扩展正常工作。

:

   int timestamp = Environment.TickCount;
   int delta = hookStruct.mouseData >> 16;
   MouseAction(null, new MouseWheelEventArgs(mouseDev, timestamp, delta));
相关文章:
  • 没有找到相关文章