I'd like to pause my program if a user is inactive for 5 minutes. By inactive I mean hasn't pressed their mouse or their keyboard during that time (including outside the program too!). Any starting points?
5 Answers
Within a timer you could p/invoke GetLastInputInfo()
which will return the number ms since input was detected from the user, across all processes in the current session.

- 171,639
- 30
- 264
- 288
-
Seems like what I need, but the weird thing is that LASTINPUTINFO only increases when I'm moving my mouse. – Andrew Jun 08 '11 at 18:51
-
4It returns the tick-time of the last input so it will go up, deduct it from Environment.TickCount – Alex K. Jun 08 '11 at 18:57
This question is very similar to an old question:
.NET equivalent for GetLastInputInfo?
Which referenced a good article describing some different options in C#:
http://www.codeproject.com/KB/cs/uim.aspx
If you don't mind using P/Invoke and being limited to running on windows systems, then using P/Invoke to call GetLastInputInfo() is probably the simplest method of accomplishing what you want.

- 1
- 1

- 618
- 6
- 15
Looks like I found solution for Your problem, look at:
How to detect a Winforms app has been idle for certain amount of time and user34660 answer,
For your app, must change:
const int MinuteMicroseconds = 60000;
to
const int MinuteMicroseconds = 300000;
It's just time, but in ms.
Works nice for my Windows Forms application.

- 2,362
- 4
- 28
- 42

- 492
- 5
- 16