我有一个运行CPU密集型作业的Windows服务。我把它安装在几台电脑上。问题是,当它运行时机器是邪恶的慢。所以我想让服务只在不活动期间运行....就像屏幕保护程序一样。
我知道我可以使用http://www.codeproject.com/KB/system/globalsystemhook.aspx中的低级键盘/鼠标挂钩。我想知道,如果Windows有一个更复杂的API,专门用于用户不活动的时期。
我知道还有其他应用程序仅在用户未使用键盘/鼠标和/或CPU使用率较低时运行。有人知道一个简单的方法吗?
谢谢!
答案 0 :(得分:1)
user32的GetLastInputInfo()怎么样。
http://msdn.microsoft.com/en-us/library/ms646302%28VS.85%29.aspx
这将告诉您自上次有一些输入以来有多少刻度。您可以定期检查此号码,并在低于某个阈值时暂停。
答案 1 :(得分:0)
您可以检查CPU性能计数器。是的,我知道这不使用本机Windows API,但可能没问题,因为你有一个.NET应用程序。
答案 2 :(得分:0)
感谢大家的建议。我最终使用了一个很棒的库 - http://www.codeproject.com/KB/cs/uim.aspx - 它提供了几种基础方法的用户活动监控。
起初我试图在底层的Windows服务中执行此操作。我发现尽管GetLastInputInfo()和全局系统挂钩对Windows服务不可用。我试过“让这个服务与桌面交互”,但它没有帮助。对于任何有兴趣的人来说都是一个提示。
我把它作为一个简单的ol winforms应用程序工作得很好。我将尝试将其重新创建为屏幕保护程序。可能很有趣!