protected override int HookCallbackProcedure(int nCode, int wParam, IntPtr lParam) { if (nCode > -1 && (MouseLog != null)) { MouseLLHookStruct mouseHookStruct = (MouseLLHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseLLHookStruct)); int clickCount = 1; MouseButton button = GetButton(wParam, out clickCount); MouseEventType eventType = GetEventType(wParam); var deltaData = (eventType == MouseEventType.MouseWheel ? (short)((mouseHookStruct.mouseData >> 16) & 0xffff) : 0); // Prevent multiple Right Click events (this probably happens for popup menus) if (button == MouseButton.Right && mouseHookStruct.flags != 0) { eventType = MouseEventType.None; } var mouseEventArgs = new HookMouseEventArgs { ClickButton = button, MouseEventType = eventType, ClickCount = clickCount, MousePosition = new Point(mouseHookStruct.pt.x, mouseHookStruct.pt.y), MouseWheelDelta = deltaData, EventTimeStamp = DateTime.Now }; if (MonitorMouseMove || eventType != MouseEventType.MouseMove) { MouseLog(mouseEventArgs); } } return(CallNextHookEx(_handleToHook, nCode, wParam, lParam)); }
/// <summary> /// 复制生成一个新对象 /// </summary> /// <param name="hookMouseEvent"></param> /// <returns></returns> public static HookMouseEventArgs Copy(HookMouseEventArgs hookMouseEvent) { var newEvent = new HookMouseEventArgs(); newEvent.XPosition = hookMouseEvent.XPosition; newEvent.YPosition = hookMouseEvent.YPosition; newEvent.MousePosition = hookMouseEvent.MousePosition; newEvent.MouseEventType = hookMouseEvent.MouseEventType; newEvent.MouseWheelDelta = hookMouseEvent.MouseWheelDelta; newEvent.EventTimeStamp = hookMouseEvent.EventTimeStamp; return(newEvent); }