【问题标题】:.NET detect user activity system-wide.NET 检测系统范围内的用户活动
【发布时间】:2010-09-13 17:26:11
【问题描述】:

我有一个运行 CPU 密集型作业的 Windows 服务。我已经在几台电脑上安装了它。问题是,当它运行时,机器速度非常慢。因此,我希望该服务仅在不活动期间运行....就像屏幕保护程序一样。

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

我知道还有其他应用程序仅在用户不使用键盘/鼠标和/或 CPU 使用率低的时候运行。有人知道一个简单的方法吗?

谢谢!

【问题讨论】:

标签: .net


【解决方案1】:

user32 的 GetLastInputInfo() 怎么样。

http://msdn.microsoft.com/en-us/library/ms646302%28VS.85%29.aspx

这将告诉您自上次输入以来有多少滴答声。您可以定期检查此数字并在低于某个阈值时暂停。

【讨论】:

  • 只检测当前会话的最后一个输入,对服务或多个登录用户不起作用。
【解决方案2】:

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

How to get the CPU Usage in C#?

【讨论】:

    【解决方案3】:

    感谢大家的建议。我最终使用了一个很棒的库——http://www.codeproject.com/KB/cs/uim.aspx——它为用户活动监控提供了几种类型的底层方法。

    起初我试图在底层 Windows 服务中执行此操作。我发现 GetLastInputInfo() 和全局系统钩子不适用于 Windows 服务。我试过“让这个服务与桌面交互”,但没有帮助。仅供有兴趣的人参考。

    我让它作为一个普通的 ol winforms 应用程序运行良好。我将尝试将其重新创建为屏幕保护程序。可能会很有趣!

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 2016-11-12
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 2016-11-26
      • 2015-09-09
      相关资源
      最近更新 更多