Currently I'm using
EventManager.RegisterClassHandler(typeof(Window),
Window.PreviewMouseMoveEvent,
new MouseEventHandler(OnPreviewMouseMove));
where OnPreviewMouseMove
just calls Stop()
and Start()
on the timer used to handle automatic timeout of my application (users should re-enter credentials after a period of inactivity).
I've noticed that this solution uses quite a bit of CPU power (as in, 3-12% on a Core i7 when I'm jittering the mouse over the window), so I wonder if there might be a better way to handle this. I understand that the jittery mouse movement and relatively low CPU usage won't be a real problem, but I am open to better ways to handle this.
I'm also unsure whether this can be made to work for non-WPF applications (my guess is I'll need different events in this case), but that might be matter for another question.
Use the Windows API call
GetLastInputInfo
to figure out when the last keyboard press or mouse movement happened. This is the same timer that the screensaver uses to figure out when to turn on.Here is a wrapper class I have used in other projects. The
Idle
event runs on the currentSynchronizationContext
or a threadpool thread if there is not one set.