为全局鼠标钩子创建新的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 -您必须能够以编程方式从鼠标设备以某种方式获得此,但如何?
参考源可以向您显示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));