2010-09-13 56 views
1

我有一个运行CPU密集型工作的Windows服务。我已经在几台电脑上安装了它。问题是,当它运行时,机器很慢。所以我希望这项服务只能在闲置期间运行......就像屏保一样。.NET检测系统范围内的用户活动

我知道我可以使用像http://www.codeproject.com/KB/system/globalsystemhook.aspx这样的低级键盘/鼠标挂钩。我想知道,如果Windows有一个更复杂的API,专门用于用户不活动期间。

我知道还有其他应用程序只能在用户不使用键盘/鼠标和/或CPU使用率较低时运行。任何人都知道一个简单的方法来做到这一点?

谢谢!

+1

您是否尝试过以最低优先级运行服务? – 2010-09-13 17:29:37

+0

[检测用户活动]的可能重复(http://stackoverflow.com/questions/5244943/detecting-user-activity) – user 2016-07-09 21:41:10

回答

0

您可以检查CPU性能计数器。是的,我知道这不使用本地Windows API,但可能会确定,因为你有一个.NET应用程序。

How to get the CPU Usage in C#?

0

感谢所有的建议。我结束了使用一个伟大的库 - http://www.codeproject.com/KB/cs/uim.aspx - 提供用户活动监视与几种类型的底层方法。

起初我试图在基础的Windows服务中做到这一点。我发现虽然GetLastInputInfo()和全局系统挂钩不可用于Windows服务。我试过“让这个服务与桌面交互”,但它没有帮助。只是给有兴趣的人一个提示。

我把它当作一个普通的winform应用程序运行很好。我将尝试将它重新创建为屏幕保护程序。可以很有趣!