C#开发winform&wpf后台捕获鼠标移动事件
      
    
    
    public class MouseMoveHelper:IDisposable
    {
        public MouseMoveHelper()
        {
        }
        public void Dispose()
        {
            try
            {
                if (mousePositionTimer != null)
                {
                    mousePositionTimer.Stop();
                    deactivatedTimer.Stop();
                    mousePositionTimer = null;
                    deactivatedTimer = null;
                }
            }
            catch (Exception ex)
            {
            }
        }
        public Action<NoOperationEvent> OK;
        #region 监测是否有用户操作
        private DispatcherTimer mousePositionTimer;    
        private Point mousePosition;    
        private int checkCount = 0;   
        private DispatcherTimer deactivatedTimer;   
        public void Start()
        {
            mousePosition = GetMousePoint();  
            if (mousePositionTimer==null)
            {
                mousePositionTimer = new DispatcherTimer();
                mousePositionTimer.Tick += new EventHandler(MousePositionTimedEvent);
                mousePositionTimer.Interval = new TimeSpan(0, 0, 1);     
            }
            mousePositionTimer.Start();
            if (deactivatedTimer == null)
            {
                deactivatedTimer = new DispatcherTimer();
                deactivatedTimer.Tick += new EventHandler(deactivatedTimer_Tick);
                deactivatedTimer.Interval = new TimeSpan(0, 0, 10);   
            }
        }
        bool isMoved = true;
        
        int maxDelayCount = 1;
        private void MousePositionTimedEvent(object sender, EventArgs e)
        {
            
            if (!HaveUsedTo())
            {
                checkCount++;    
                if (checkCount == maxDelayCount)
                {
                    checkCount = 0;
                    
                    if (isMoved)
                    {
                        isMoved = false;
                        OK?.Invoke(new NoOperationEvent() { Message = "检测到无鼠标移动", CurrentMouseState = NoOperationEvent.MouseState.standstill });
                    }
                }
            }
            else
            {
                OK?.Invoke(new NoOperationEvent() { Message = "检测到鼠标移动", CurrentMouseState = NoOperationEvent.MouseState.move });
                checkCount = 0;     
                isMoved=true;
            }
        }
        private void deactivatedTimer_Tick(object sender, EventArgs e)
        {
            deactivatedTimer.Stop();
            
            
        }
        
        private bool HaveUsedTo()
        {
            Point point = GetMousePoint();
            if (point == mousePosition)
            {
                return false;
            }
            mousePosition = point;
            return true;
        }
        [StructLayout(LayoutKind.Sequential)]
        private struct MPoint
        {
            public int X;
            public int Y;
            public MPoint(int x, int y)
            {
                this.X = x;
                this.Y = y;
            }
        }
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern bool GetCursorPos(out MPoint mpt);
        
        public Point GetMousePoint()
        {
            MPoint mpt = new MPoint();
            GetCursorPos(out mpt);
            Point p = new Point(mpt.X, mpt.Y);
            return p;
        }
        
        #endregion
    }
 
 
            var MouseMoveHelper = new MouseMoveHelper();
            MouseMoveHelper.OK = CheckMouseState;
             MouseMoveHelper.Start();