You have 2 options... either use the MouseMove event (if you are using forms or some .net UI element) or act directly on the cursor... There is no way *to my knowledge* of doing Cursor.IsMoving or anything similar, you have to just poll the mouse or get the data pushed to you as and when it happens...

If you were going to purely use a timer i would do something like this each tick:

- Get the cursor position
- Compare it to previous position to get distance
- Add the distance to a static X/Y or Point
- Update the previous position to current position

This way every time the timer ticks it will see how far they have moved and add it into some sort of static variable that tracks the total movement, then if the tick fires and the cursor position == previous position they have not moved, so you can just stop the timer and get how much total distance has been covered in your static container...

If you were going to use the mouse event i would do the same but you would need to have a timer to timeout if they dont move for a while, as the mousemove event only fires when you move, which is great for most cases, but in this one you want to know when they are not moving, so if you do as i suggested before and have a timer that is unable to tick (due to it resetting with each movement) unless the mouse stays still... hardly an elegant solution but does what you need...

I would recommend doing the 1st option given the criteria you mentioned and that you just want some total distance not lots of small updates, it would be faster as well. Only problem is you need to work out when to start the timer going and grab the cursors location when you start it and put it into the previous location if that makes sense...